From: Zhenbo Li Subject: msxml3: Handle NULL parameter in IXMLDOMElement::get_ownerDocument(). (try 2) Message-Id: <55BB3BE0.6080801@gmail.com> Date: Fri, 31 Jul 2015 17:12:00 +0800 try 2: Test get_ownerDocument for more xml nodes. --- dlls/msxml3/node.c | 2 ++ dlls/msxml3/tests/domdoc.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) 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..9211fe2 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -3364,6 +3364,55 @@ static void test_get_childNodes(void) free_bstrs(); } +static void test_get_ownerDocument_null(void) +{ + VARIANT_BOOL b; + IXMLDOMDocument *doc; + IXMLDOMElement *element; + IXMLDOMNodeList *node_list; + IXMLDOMNode *node; + LONG i, len; + HRESULT hr; + const CHAR nodeXML[] = + "" + " " + " text node 0" + " " + " " + " " + ""; + + doc = create_document(&IID_IXMLDOMDocument); + + hr = IXMLDOMDocument_loadXML( doc, _bstr_(nodeXML), &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); + + for(i = 0; i < len; i++) { + hr = IXMLDOMNodeList_get_item(node_list, i, &node); + EXPECT_HR(hr, S_OK); + + hr = IXMLDOMNode_get_ownerDocument( node, 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 +12013,8 @@ START_TEST(domdoc) test_xsltemplate(); test_xsltext(); + test_get_ownerDocument_null(); + if (is_clsid_supported(&CLSID_MXNamespaceManager40, &IID_IMXNamespaceManager)) { test_mxnamespacemanager();