msxml3: Properly update node to doc link when cloning
Nikolay Sivov
nsivov at codeweavers.com
Wed Nov 21 11:59:04 CST 2012
Otherwise cloned attributes and children will have null doc pointer.
-------------- next part --------------
>From 5e98c7886feaccbee64c5baed60b7e4e285b333c Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed, 21 Nov 2012 19:50:32 -0500
Subject: [PATCH 1/1] Properly update node to doc link when cloning
---
dlls/msxml3/node.c | 2 +-
dlls/msxml3/tests/domdoc.c | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 30ce1b9..7b6e1ab 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -595,7 +595,7 @@ HRESULT node_clone(xmlnode *This, VARIANT_BOOL deep, IXMLDOMNode **cloneNode)
clone = xmlCopyNode(This->node, deep ? 1 : 2);
if (clone)
{
- clone->doc = This->node->doc;
+ xmlSetTreeDoc(clone, This->node->doc);
xmldoc_add_orphan(clone->doc, clone);
node = create_node(clone);
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 4b894b0..3a62c95 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -6073,7 +6073,7 @@ static void test_cloneNode(void )
IXMLDOMNamedNodeMap *mapAttr;
LONG length, length1;
LONG attr_cnt, attr_cnt1;
- IXMLDOMNode *node;
+ IXMLDOMNode *node, *attr;
IXMLDOMNode *node_clone;
IXMLDOMNode *node_first;
HRESULT hr;
@@ -6134,6 +6134,11 @@ static void test_cloneNode(void )
hr = IXMLDOMNamedNodeMap_get_length(mapAttr, &attr_cnt1);
ok( hr == S_OK, "ret %08x\n", hr );
ok(attr_cnt1 == 3, "got %d\n", attr_cnt1);
+ /* now really get some attributes from cloned element */
+ attr = NULL;
+ hr = IXMLDOMNamedNodeMap_getNamedItem(mapAttr, _bstr_("id"), &attr);
+ ok(hr == S_OK, "ret %08x\n", hr);
+ IXMLDOMNode_Release(attr);
IXMLDOMNamedNodeMap_Release(mapAttr);
ok(length == length1, "wrong Child count (%d, %d)\n", length, length1);
--
1.7.10.4
More information about the wine-patches
mailing list