Zhenbo Li : msxml3: Handle NULL parameter in IXMLDOMElement:: get_ownerDocument().
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Aug 13 04:23:49 CDT 2015
Module: wine
Branch: master
Commit: 59c2b325ea2326ad9ccdc3ed478e1e8ba45a17ec
URL: http://source.winehq.org/git/wine.git/?a=commit;h=59c2b325ea2326ad9ccdc3ed478e1e8ba45a17ec
Author: Zhenbo Li <litimetal at gmail.com>
Date: Sun Aug 9 21:11:45 2015 +0800
msxml3: Handle NULL parameter in IXMLDOMElement::get_ownerDocument().
---
dlls/msxml3/node.c | 2 ++
dlls/msxml3/tests/domdoc.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 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..df71b49 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -7467,6 +7467,19 @@ static void test_get_ownerDocument(void)
IXMLDOMSchemaCollection *cache;
VARIANT_BOOL b;
VARIANT var;
+ IXMLDOMElement *element;
+ IXMLDOMNodeList *node_list;
+ IXMLDOMAttribute *attr;
+ LONG i, len;
+ HRESULT hr;
+ const CHAR nodeXML[] =
+ "<root id='0'>"
+ " <!-- comment node 0 -->"
+ " text node 0"
+ " <x attr='val'></x>"
+ " <?foo value='PI for x'?>"
+ " <![CDATA[ cdata ]]>"
+ "</root>";
if (!is_clsid_supported(&CLSID_DOMDocument2, &IID_IXMLDOMDocument2)) return;
if (!is_clsid_supported(&CLSID_XMLSchemaCache, &IID_IXMLDOMSchemaCollection)) return;
@@ -7519,6 +7532,47 @@ static void test_get_ownerDocument(void)
check_default_props(doc_owner);
check_default_props(doc);
+ /* NULL check */
+ hr = IXMLDOMDocument_loadXML(doc1, _bstr_(nodeXML), &b);
+ EXPECT_HR(hr, S_OK);
+ ok(b == VARIANT_TRUE, "failed to load XML string\n");
+
+ hr = IXMLDOMDocument_get_documentElement(doc1, &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);
+ }
+ IXMLDOMElement_Release(element);
+
+ /* Test Attribute Node */
+ hr = IXMLDOMNodeList_get_item(node_list, 2, &node);
+ EXPECT_HR(hr, S_OK);
+ hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMElement, (void**)&element);
+ EXPECT_HR(hr, S_OK);
+ IXMLDOMNode_Release(node);
+
+ hr = IXMLDOMElement_getAttributeNode(element, _bstr_("attr"), &attr);
+ EXPECT_HR(hr, S_OK);
+ ok(attr != NULL, "attr == NULL\n");
+ IXMLDOMElement_Release(element);
+ hr = IXMLDOMAttribute_get_ownerDocument(attr, NULL);
+ EXPECT_HR(hr, E_INVALIDARG);
+ IXMLDOMAttribute_Release(attr);
+ IXMLDOMNodeList_Release(node_list);
+
IXMLDOMSchemaCollection_Release(cache);
IXMLDOMDocument_Release(doc1);
IXMLDOMDocument_Release(doc2);
More information about the wine-cvs
mailing list