[06/13] msxml3: Fix leaks in callers of xmlChar_from_wchar

Michael Karcher wine at mkarcher.dialup.fu-berlin.de
Sat Oct 11 16:58:35 CDT 2008


As xmlChar_from_wchar HeapAlloc()s the result string, the result
as to be freed be the caller.
---
 dlls/msxml3/cdata.c   |    2 ++
 dlls/msxml3/comment.c |    2 ++
 dlls/msxml3/node.c    |   14 +++++++++-----
 dlls/msxml3/text.c    |    2 ++
 4 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c
index 8cf3940..368b731 100644
--- a/dlls/msxml3/cdata.c
+++ b/dlls/msxml3/cdata.c
@@ -606,6 +606,7 @@ static HRESULT WINAPI domcdata_appendData(
     }
     else
         hr = E_FAIL;
+    HeapFree(GetProcessHeap(), 0, pContent);
 
     return hr;
 }
@@ -667,6 +668,7 @@ static HRESULT WINAPI domcdata_insertData(
                 xmlNodeSetContent(pDOMNode->node, str);
                 hr = S_OK;
             }
+            HeapFree(GetProcessHeap(), 0, str);
 
             SysFreeString(sNewString);
         }
diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c
index ec6355f..20781a1 100644
--- a/dlls/msxml3/comment.c
+++ b/dlls/msxml3/comment.c
@@ -616,6 +616,7 @@ static HRESULT WINAPI domcomment_appendData(
             else
                 hr = E_FAIL;
         }
+        HeapFree( GetProcessHeap(), 0, pContent );
     }
     else
         hr = E_FAIL;
@@ -680,6 +681,7 @@ static HRESULT WINAPI domcomment_insertData(
                 xmlNodeSetContent(pDOMNode->node, str);
                 hr = S_OK;
             }
+            HeapFree( GetProcessHeap(), 0, str );
 
             SysFreeString(sNewString);
         }
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index d7eb675..cecabe8 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -372,6 +372,7 @@ static HRESULT WINAPI xmlnode_put_nodeValue(
       {
         str = xmlChar_from_wchar((WCHAR*)V_BSTR(&string_value));
         xmlNodeSetContent(This->node, str);
+        HeapFree(GetProcessHeap(),0,str);
         hr = S_OK;
         break;
       }
@@ -919,7 +920,7 @@ static HRESULT WINAPI xmlnode_put_text(
     BSTR text)
 {
     xmlnode *This = impl_from_IXMLDOMNode( iface );
-    xmlChar *str = NULL;
+    xmlChar *str, *str2, *str3;
 
     TRACE("%p\n", This);
 
@@ -934,11 +935,13 @@ static HRESULT WINAPI xmlnode_put_text(
     str = xmlChar_from_wchar((WCHAR*)text);
 
     /* Escape the string. */
-    str = xmlEncodeEntitiesReentrant(This->node->doc, str);
-    str = xmlEncodeSpecialChars(This->node->doc, str);
+    str2 = xmlEncodeEntitiesReentrant(This->node->doc, str);
+    HeapFree(GetProcessHeap(), 0, str);
+    str3 = xmlEncodeSpecialChars(This->node->doc, str2);
+    xmlFree(str2);
 
-    xmlNodeSetContent(This->node, str);
-    xmlFree(str);
+    xmlNodeSetContent(This->node, str3);
+    xmlFree(str3);
 
     return S_OK;
 }
@@ -1091,6 +1094,7 @@ static HRESULT WINAPI xmlnode_put_dataType(
             else
                 ERR("Failed to Create Namepsace\n");
         }
+        HeapFree( GetProcessHeap(), 0, str );
     }
 
     return hr;
diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c
index 7cb1d42..f8e1fc4 100644
--- a/dlls/msxml3/text.c
+++ b/dlls/msxml3/text.c
@@ -603,6 +603,7 @@ static HRESULT WINAPI domtext_appendData(
             hr = S_OK;
         else
             hr = E_FAIL;
+        HeapFree( GetProcessHeap(), 0, pContent );
     }
     else
         hr = E_FAIL;
@@ -667,6 +668,7 @@ static HRESULT WINAPI domtext_insertData(
                 xmlNodeSetContent(pDOMNode->node, str);
                 hr = S_OK;
             }
+            HeapFree(GetProcessHeap(), 0, str);
 
             SysFreeString(sNewString);
         }
-- 
1.5.6.5




More information about the wine-patches mailing list