Nikolay Sivov : msxml3: Handle parser failure when loading from url.
Alexandre Julliard
julliard at winehq.org
Mon Oct 14 12:39:28 CDT 2013
Module: wine
Branch: master
Commit: abdf02526ee9e0e19527f05767237d11fabde005
URL: http://source.winehq.org/git/wine.git/?a=commit;h=abdf02526ee9e0e19527f05767237d11fabde005
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Oct 12 22:11:41 2013 +0400
msxml3: Handle parser failure when loading from url.
---
dlls/msxml3/bsc.c | 2 +-
dlls/msxml3/domdoc.c | 16 +-------------
dlls/msxml3/tests/domdoc.c | 45 ++++++++++++++++++++++++++++++-------------
3 files changed, 34 insertions(+), 29 deletions(-)
diff --git a/dlls/msxml3/bsc.c b/dlls/msxml3/bsc.c
index 580d509..c8683d5 100644
--- a/dlls/msxml3/bsc.c
+++ b/dlls/msxml3/bsc.c
@@ -174,7 +174,7 @@ static HRESULT WINAPI bsc_OnStopBinding(
DWORD len = GlobalSize(hglobal);
char *ptr = GlobalLock(hglobal);
- This->hres = hr = This->onDataAvailable(This->obj, ptr, len);
+ This->hres = This->onDataAvailable(This->obj, ptr, len);
GlobalUnlock(hglobal);
}
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index a96b5c7..26a2dad 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -129,7 +129,6 @@ struct domdoc
VARIANT_BOOL validating;
VARIANT_BOOL resolving;
domdoc_properties* properties;
- bsc_t *bsc;
HRESULT error;
/* IObjectWithSite*/
@@ -940,9 +939,6 @@ static ULONG WINAPI domdoc_Release( IXMLDOMDocument3 *iface )
{
int eid;
- if(This->bsc)
- detach_bsc(This->bsc);
-
if (This->site)
IUnknown_Release( This->site );
destroy_xmlnode(&This->node);
@@ -2067,7 +2063,7 @@ static HRESULT domdoc_onDataAvailable(void *obj, char *ptr, DWORD len)
return attach_xmldoc(This, xmldoc);
}
- return S_OK;
+ return E_FAIL;
}
static HRESULT domdoc_load_moniker(domdoc *This, IMoniker *mon)
@@ -2079,14 +2075,7 @@ static HRESULT domdoc_load_moniker(domdoc *This, IMoniker *mon)
if(FAILED(hr))
return hr;
- if(This->bsc) {
- hr = detach_bsc(This->bsc);
- if(FAILED(hr))
- return hr;
- }
-
- This->bsc = bsc;
- return S_OK;
+ return detach_bsc(bsc);
}
static HRESULT WINAPI domdoc_load(
@@ -3555,7 +3544,6 @@ HRESULT get_domdoc_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **document)
doc->error = S_OK;
doc->site = NULL;
doc->safeopt = 0;
- doc->bsc = NULL;
doc->cp_list = NULL;
doc->namespaces = NULL;
memset(doc->events, 0, sizeof(doc->events));
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 921cb16..914b9e7 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -405,6 +405,8 @@ static const char win1252decl[] =
DECL_WIN_1252
;
+static const char nocontent[] = "no xml content here";
+
static const char szExampleXML[] =
"<?xml version='1.0' encoding='utf-8'?>\n"
"<root xmlns:foo='urn:uuid:86B2F87F-ACB6-45cd-8B77-9BDB92A01A29' a=\"attr a\" foo:b=\"attr b\" >\n"
@@ -1125,10 +1127,9 @@ static void test_domdoc( void )
V_VT(&var) = VT_BSTR;
V_BSTR(&var) = _bstr_(path);
hr = IXMLDOMDocument_load(doc, var, &b);
- todo_wine {
EXPECT_HR(hr, class_ptr->ret[0].hr);
ok(b == class_ptr->ret[0].b, "%d:%d, got %d, expected %d\n", index, i, b, class_ptr->ret[0].b);
- }
+
DeleteFileA(path);
b = 0xc;
@@ -9512,28 +9513,33 @@ static void test_selection(void)
free_bstrs();
}
+static void write_to_file(const char *name, const char *data)
+{
+ DWORD written;
+ HANDLE hfile;
+ BOOL ret;
+
+ hfile = CreateFileA(name, GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
+ ok(hfile != INVALID_HANDLE_VALUE, "failed to create test file: %s\n", name);
+
+ ret = WriteFile(hfile, data, strlen(data), &written, NULL);
+ ok(ret, "WriteFile failed: %s, %d\n", name, GetLastError());
+
+ CloseHandle(hfile);
+}
+
static void test_load(void)
{
IXMLDOMDocument *doc;
IXMLDOMNodeList *list;
VARIANT_BOOL b;
- HANDLE hfile;
VARIANT src;
HRESULT hr;
- BOOL ret;
BSTR path, bstr1, bstr2;
- DWORD written;
void* ptr;
/* prepare a file */
- hfile = CreateFileA("test.xml", GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
- ok(hfile != INVALID_HANDLE_VALUE, "failed to create test file\n");
- if(hfile == INVALID_HANDLE_VALUE) return;
-
- ret = WriteFile(hfile, win1252xml, strlen(win1252xml), &written, NULL);
- ok(ret, "WriteFile failed\n");
-
- CloseHandle(hfile);
+ write_to_file("test.xml", win1252xml);
doc = create_document(&IID_IXMLDOMDocument);
@@ -9567,9 +9573,20 @@ static void test_load(void)
EXPECT_HR(hr, E_INVALIDARG);
ok(b == VARIANT_FALSE, "got %d\n", b);
- IXMLDOMDocument_Release(doc);
+ DeleteFileA("test.xml");
+
+ /* load from existing path, no xml content */
+ write_to_file("test.xml", nocontent);
+
+ V_VT(&src) = VT_BSTR;
+ V_BSTR(&src) = path;
+ b = VARIANT_TRUE;
+ hr = IXMLDOMDocument_load(doc, src, &b);
+ ok(hr == S_FALSE, "got 0x%08x\n", hr);
+ ok(b == VARIANT_FALSE, "got %d\n", b);
DeleteFileA("test.xml");
+ IXMLDOMDocument_Release(doc);
doc = create_document(&IID_IXMLDOMDocument);
More information about the wine-cvs
mailing list