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>
This commit is contained in:
Hans Leidekker 2016-03-30 14:12:15 +02:00 committed by Alexandre Julliard
parent f162da498f
commit e4a68fd576
1 changed files with 12 additions and 8 deletions

View File

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