Module: wine Branch: master Commit: e4a68fd57657d58d733f9813d2a675cab1a4bf10 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e4a68fd57657d58d733f9813d2...
Author: Hans Leidekker hans@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 ); }
/**************************************************************************