diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 7baef30823d..72cc61e4c15 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -387,6 +387,11 @@ static HRESULT get_node( if ( !out ) return E_INVALIDARG; + + /* if we dont have a doc, use our parent. */ + if(node && !node->doc && node->parent) + node->doc = node->parent->doc; + *out = create_node( node ); if (!*out) return S_FALSE; diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 584eab33e22..c70e6edb3e2 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -2404,6 +2404,7 @@ static void test_cloneNode(void ) long nAttrCnt = 0, nAttrCnt1 = 0; IXMLDOMNode *node; IXMLDOMNode *node_clone; + IXMLDOMNode *node_first; HRESULT r; BSTR str; static const WCHAR szSearch[] = { 'l', 'c', '/', 'p', 'r', 0 }; @@ -2448,6 +2449,20 @@ static void test_cloneNode(void ) return; } + r = IXMLDOMNode_get_firstChild(node_clone, &node_first); + ok( r == S_OK, "ret %08x\n", r ); + if(r == S_OK) + { + IXMLDOMDocument *doc2; + + r = IXMLDOMNode_get_ownerDocument(node_clone, &doc2); + ok( r == S_OK, "ret %08x\n", r ); + if(r == S_OK) + IXMLDOMDocument_Release(doc2); + + IXMLDOMNode_Release(node_first); + } + r = IXMLDOMNode_get_childNodes(node, &pList); ok( r == S_OK, "ret %08x\n", r ); if (pList) @@ -2496,6 +2511,20 @@ static void test_cloneNode(void ) return; } + r = IXMLDOMNode_get_firstChild(node_clone, &node_first); + ok( r == S_FALSE, "ret %08x\n", r ); + if(r == S_OK) + { + IXMLDOMDocument *doc2; + + r = IXMLDOMNode_get_ownerDocument(node_clone, &doc2); + ok( r == S_OK, "ret %08x\n", r ); + if(r == S_OK) + IXMLDOMDocument_Release(doc2); + + IXMLDOMNode_Release(node_first); + } + r = IXMLDOMNode_get_childNodes(node_clone, &pList); ok( r == S_OK, "ret %08x\n", r ); if (pList)