[2/6] webservices: Fix memory leaks on error paths in WsCreateReader.

Hans Leidekker hans at codeweavers.com
Wed Mar 30 07:12:15 CDT 2016


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/webservices/reader.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 7adc283..9ae6254 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -464,6 +464,15 @@ static void clear_prefixes( struct prefix *prefixes, ULONG count )
     }
 }
 
+static void free_reader( struct reader *reader )
+{
+    if (!reader) return;
+    destroy_nodes( reader->root );
+    clear_prefixes( reader->prefixes, reader->nb_prefixes );
+    heap_free( reader->prefixes );
+    heap_free( reader );
+}
+
 static HRESULT set_prefix( struct prefix *prefix, const WS_XML_STRING *str, const WS_XML_STRING *ns )
 {
     if (str)
@@ -608,14 +617,14 @@ HRESULT WINAPI WsCreateReader( const WS_XML_READER_PROPERTY *properties, ULONG c
         hr = set_reader_prop( reader, properties[i].id, properties[i].value, properties[i].valueSize );
         if (hr != S_OK)
         {
-            heap_free( reader );
+            free_reader( reader );
             return hr;
         }
     }
 
     if ((hr = read_init_state( reader )) != S_OK)
     {
-        heap_free( reader );
+        free_reader( reader );
         return hr;
     }
 
@@ -631,12 +640,7 @@ void WINAPI WsFreeReader( WS_XML_READER *handle )
     struct reader *reader = (struct reader *)handle;
 
     TRACE( "%p\n", handle );
-
-    if (!reader) return;
-    destroy_nodes( reader->root );
-    clear_prefixes( reader->prefixes, reader->nb_prefixes );
-    heap_free( reader->prefixes );
-    heap_free( reader );
+    free_reader( reader );
 }
 
 /**************************************************************************
-- 
2.8.0.rc3




More information about the wine-patches mailing list