[2/2] msxml3: Text node should not aggregate element.

Michael Karcher wine at mkarcher.dialup.fu-berlin.de
Thu Oct 9 08:36:14 CDT 2008


This will fix the broken dialogs in Origin 8.0 (#10771), maybe it is
also a fix for #11376 (crash of origin during plot command).
---
 dlls/msxml3/tests/domdoc.c |    3 +++
 dlls/msxml3/text.c         |   17 ++++++++---------
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 03b201b..65cd941 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -558,6 +558,9 @@ static void test_domdoc( void )
     if(nodetext)
     {
         IXMLDOMNamedNodeMap *pAttribs;
+        
+        r = IXMLDOMText_QueryInterface(nodetext, &IID_IXMLDOMElement, (LPVOID*)&element);
+        ok(r == E_NOINTERFACE, "ret %08x\n", r );
 
         /* Text Last Child Checks */
         r = IXMLDOMText_get_lastChild(nodetext, NULL);
diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c
index 59b6bfe..7cb1d42 100644
--- a/dlls/msxml3/text.c
+++ b/dlls/msxml3/text.c
@@ -42,7 +42,7 @@ typedef struct _domtext
 {
     const struct IXMLDOMTextVtbl *lpVtbl;
     LONG ref;
-    IUnknown *element_unk;
+    IUnknown *node_unk;
     IXMLDOMNode *node;
 } domtext;
 
@@ -66,10 +66,9 @@ static HRESULT WINAPI domtext_QueryInterface(
     {
         *ppvObject = iface;
     }
-    else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) ||
-              IsEqualGUID( riid, &IID_IXMLDOMElement ) )
+    else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) )
     {
-        return IUnknown_QueryInterface(This->element_unk, riid, ppvObject);
+        return IUnknown_QueryInterface(This->node_unk, riid, ppvObject);
     }
     else
     {
@@ -98,7 +97,7 @@ static ULONG WINAPI domtext_Release(
     ref = InterlockedDecrement( &This->ref );
     if ( ref == 0 )
     {
-        IUnknown_Release( This->element_unk );
+        IUnknown_Release( This->node_unk );
         HeapFree( GetProcessHeap(), 0, This );
     }
 
@@ -773,17 +772,17 @@ IUnknown* create_text( xmlNodePtr text )
     This->lpVtbl = &domtext_vtbl;
     This->ref = 1;
 
-    This->element_unk = create_element( text, (IUnknown*)&This->lpVtbl );
-    if(!This->element_unk)
+    This->node_unk = create_basic_node( text, (IUnknown*)&This->lpVtbl );
+    if(!This->node_unk)
     {
         HeapFree(GetProcessHeap(), 0, This);
         return NULL;
     }
 
-    hr = IUnknown_QueryInterface(This->element_unk, &IID_IXMLDOMNode, (LPVOID*)&This->node);
+    hr = IUnknown_QueryInterface(This->node_unk, &IID_IXMLDOMNode, (LPVOID*)&This->node);
     if(FAILED(hr))
     {
-        IUnknown_Release(This->element_unk);
+        IUnknown_Release(This->node_unk);
         HeapFree( GetProcessHeap(), 0, This );
         return NULL;
     }
-- 
1.5.6.5




More information about the wine-patches mailing list