Michael Karcher : msxml3: attach_xmldoc may fail.
Alexandre Julliard
julliard at winehq.org
Mon Dec 1 07:34:26 CST 2008
Module: wine
Branch: master
Commit: afb17f29e17b8b2cd6e62b8bf0d2ae02166db573
URL: http://source.winehq.org/git/wine.git/?a=commit;h=afb17f29e17b8b2cd6e62b8bf0d2ae02166db573
Author: Michael Karcher <wine at mkarcher.dialup.fu-berlin.de>
Date: Sat Nov 29 10:52:24 2008 +0100
msxml3: attach_xmldoc may fail.
The upcoming new implementation of attach_xmldoc needs HeapAlloc. Prepare
for the failure case.
---
dlls/msxml3/domdoc.c | 27 +++++++++++++++------------
1 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index c8eec39..f71b134 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -209,7 +209,7 @@ HRESULT xmldoc_remove_orphan(xmlDocPtr doc, xmlNodePtr node)
return S_FALSE;
}
-static void attach_xmldoc( IXMLDOMNode *node, xmlDocPtr xml )
+static HRESULT attach_xmldoc( IXMLDOMNode *node, xmlDocPtr xml )
{
xmlnode *This = impl_from_IXMLDOMNode( node );
@@ -220,7 +220,7 @@ static void attach_xmldoc( IXMLDOMNode *node, xmlDocPtr xml )
if(This->node)
xmldoc_add_ref(This->node->doc);
- return;
+ return S_OK;
}
static inline domdoc *impl_from_IXMLDOMDocument2( IXMLDOMDocument2 *iface )
@@ -345,9 +345,8 @@ static HRESULT WINAPI xmldoc_IPersistStream_Load(
}
xmldoc->_private = create_priv();
- attach_xmldoc( This->node, xmldoc );
- return S_OK;
+ return attach_xmldoc( This->node, xmldoc );
}
static HRESULT WINAPI xmldoc_IPersistStream_Save(
@@ -1324,7 +1323,7 @@ static HRESULT domdoc_onDataAvailable(void *obj, char *ptr, DWORD len)
xmldoc = doparse( ptr, len );
if(xmldoc) {
xmldoc->_private = create_priv();
- attach_xmldoc(This->node, xmldoc);
+ return attach_xmldoc(This->node, xmldoc);
}
return S_OK;
@@ -1377,11 +1376,12 @@ static HRESULT WINAPI domdoc_load(
{
domdoc *newDoc = impl_from_IXMLDOMDocument2( pNewDoc );
xmldoc = xmlCopyDoc(get_doc(newDoc), 1);
- attach_xmldoc(This->node, xmldoc);
+ hr = attach_xmldoc(This->node, xmldoc);
- *isSuccessful = VARIANT_TRUE;
+ if(SUCCEEDED(hr))
+ *isSuccessful = VARIANT_TRUE;
- return S_OK;
+ return hr;
}
}
hr = IUnknown_QueryInterface(V_UNKNOWN(&xmlSource), &IID_IStream, (void**)&pStream);
@@ -1438,8 +1438,9 @@ static HRESULT WINAPI domdoc_load(
if(!filename || FAILED(hr)) {
xmldoc = xmlNewDoc(NULL);
xmldoc->_private = create_priv();
- attach_xmldoc(This->node, xmldoc);
- hr = S_FALSE;
+ hr = attach_xmldoc(This->node, xmldoc);
+ if(SUCCEEDED(hr))
+ hr = S_FALSE;
}
TRACE("ret (%d)\n", hr);
@@ -1541,7 +1542,7 @@ static HRESULT WINAPI domdoc_loadXML(
xmlDocPtr xmldoc = NULL;
char *str;
int len;
- HRESULT hr = S_FALSE;
+ HRESULT hr = S_FALSE, hr2;
TRACE("%p %s %p\n", This, debugstr_w( bstrXML ), isSuccessful );
@@ -1568,7 +1569,9 @@ static HRESULT WINAPI domdoc_loadXML(
xmldoc = xmlNewDoc(NULL);
xmldoc->_private = create_priv();
- attach_xmldoc( This->node, xmldoc );
+ hr2 = attach_xmldoc( This->node, xmldoc );
+ if( FAILED(hr2) )
+ hr = hr2;
return hr;
}
More information about the wine-cvs
mailing list