[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