Nikolay Sivov : msxml3: Don't try to use null interface pointer.
Alexandre Julliard
julliard at winehq.org
Mon Oct 24 13:43:54 CDT 2011
Module: wine
Branch: master
Commit: ae6ea94bb3233c1339098dd4e9c4881fcea55e70
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ae6ea94bb3233c1339098dd4e9c4881fcea55e70
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Oct 22 21:22:05 2011 +0400
msxml3: Don't try to use null interface pointer.
---
dlls/msxml3/node.c | 7 +++++--
dlls/msxml3/tests/domdoc.c | 20 ++++++++++++++++++++
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 681cd44..7219bd3 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -311,8 +311,11 @@ HRESULT node_insert_before(xmlnode *This, IXMLDOMNode *new_child, const VARIANT
case VT_UNKNOWN:
case VT_DISPATCH:
- hr = IUnknown_QueryInterface(V_UNKNOWN(ref_child), &IID_IXMLDOMNode, (void**)&before);
- if(FAILED(hr)) return hr;
+ if (V_UNKNOWN(ref_child))
+ {
+ hr = IUnknown_QueryInterface(V_UNKNOWN(ref_child), &IID_IXMLDOMNode, (void**)&before);
+ if(FAILED(hr)) return hr;
+ }
break;
default:
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index a758880..c12aa5c 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -9341,12 +9341,32 @@ static void test_insertBefore(void)
hr = IXMLDOMDocument_createElement(doc, _bstr_("elem3"), &elem3);
ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IXMLDOMDocument_createElement(doc, _bstr_("elem3"), &elem3);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IXMLDOMDocument_createElement(doc, _bstr_("elem4"), &elem4);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
EXPECT_NO_CHILDREN(elem1);
EXPECT_NO_CHILDREN(elem2);
EXPECT_NO_CHILDREN(elem3);
todo_wine EXPECT_REF(elem2, 2);
+ V_VT(&v) = VT_DISPATCH;
+ V_DISPATCH(&v) = NULL;
+ node = NULL;
+ hr = IXMLDOMElement_insertBefore(elem1, (IXMLDOMNode*)elem4, v, &node);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(node == (void*)elem4, "got %p\n", node);
+
+ EXPECT_CHILDREN(elem1);
+ hr = IXMLDOMElement_removeChild(elem1, (IXMLDOMNode*)elem4, NULL);
+ EXPECT_HR(hr, S_OK);
+ IXMLDOMElement_Release(elem4);
+
+ EXPECT_NO_CHILDREN(elem1);
+
V_VT(&v) = VT_NULL;
node = NULL;
hr = IXMLDOMElement_insertBefore(elem1, (IXMLDOMNode*)elem2, v, &node);
More information about the wine-cvs
mailing list