msxml3: Handle NULL parameter in IXMLDOMElement::get_ownerDocument().

Zhenbo Li litimetal at gmail.com
Sat Jul 18 10:21:12 CDT 2015


2015-07-15 16:24 GMT+08:00 Nikolay Sivov <bunglehead at gmail.com>:
>>
>
> No, helper like that won't work, because the point is to check how all node
> types work, not just elements. What I meant is to have a separate test_*
> function in START_TEST() that will load a document with all node types you
> need and iterating through them call get_ownderDocument.


Hi Nikolay,
Do you mean an iteration like that? Have I tested all the included nodes?
Also, we already have a helper function: test_get_ownerDocument()
Should I use this?

My draft patch has been attached.

Thanks

-- 
Have a nice day!
Zhenbo Li
-------------- next part --------------
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 1ddc9bf..90b5bde 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -654,6 +654,8 @@ HRESULT node_has_childnodes(const xmlnode *This, VARIANT_BOOL *ret)
 
 HRESULT node_get_owner_doc(const xmlnode *This, IXMLDOMDocument **doc)
 {
+    if(!doc)
+        return E_INVALIDARG;
     return get_domdoc_from_xmldoc(This->node->doc, (IXMLDOMDocument3**)doc);
 }
 
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index f7f57ac..bfa4fe7 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -3364,6 +3364,47 @@ static void test_get_childNodes(void)
     free_bstrs();
 }
 
+static void test_null_owner(void)
+{
+    IXMLDOMNodeList *node_list;
+    VARIANT_BOOL b;
+    IXMLDOMDocument *doc;
+    IXMLDOMNode *node;
+    IXMLDOMElement *element;
+    HRESULT hr;
+    LONG i, len;
+
+    doc = create_document(&IID_IXMLDOMDocument);
+
+    hr = IXMLDOMDocument_loadXML( doc, _bstr_(complete4A), &b );
+    EXPECT_HR(hr, S_OK);
+    ok( b == VARIANT_TRUE, "failed to load XML string\n");
+
+    hr = IXMLDOMDocument_get_documentElement( doc, &element );
+    EXPECT_HR(hr, S_OK);
+
+    hr = IXMLDOMElement_get_childNodes( element, &node_list );
+    EXPECT_HR(hr, S_OK);
+
+    hr = IXMLDOMNodeList_get_length( node_list, &len );
+    EXPECT_HR(hr, S_OK);
+    ok( len == 4, "len %d\n", len);
+
+    for(i = 0; i < len; i++) {
+        hr = IXMLDOMNodeList_get_item(node_list, 0, &node);
+        EXPECT_HR(hr, S_OK);
+
+        hr = IXMLDOMElement_get_ownerDocument( element, NULL );
+        EXPECT_HR(hr, E_INVALIDARG);
+
+        IXMLDOMNode_Release(node);
+    }
+    IXMLDOMNodeList_Release( node_list );
+    IXMLDOMElement_Release(element);
+    IXMLDOMDocument_Release( doc );
+    free_bstrs();
+}
+
 static void test_get_firstChild(void)
 {
     static const WCHAR xmlW[] = {'x','m','l',0};
@@ -11964,6 +12005,8 @@ START_TEST(domdoc)
     test_xsltemplate();
     test_xsltext();
 
+    test_null_owner();
+
     if (is_clsid_supported(&CLSID_MXNamespaceManager40, &IID_IMXNamespaceManager))
     {
         test_mxnamespacemanager();


More information about the wine-devel mailing list