Hans Leidekker : webservices: Fix memory leaks on error paths in WsCreateReader.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Mar 30 10:00:31 CDT 2016


Module: wine
Branch: master
Commit: e4a68fd57657d58d733f9813d2a675cab1a4bf10
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e4a68fd57657d58d733f9813d2a675cab1a4bf10

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Wed Mar 30 14:12:15 2016 +0200

webservices: Fix memory leaks on error paths in WsCreateReader.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 );
 }
 
 /**************************************************************************




More information about the wine-cvs mailing list