webservices: Always create a copy of strings to insert in the dictionary.

Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Hans Leidekker 2017-10-03 16:14:44 +02:00 committed by Alexandre Julliard
parent 0567952c70
commit 3076f5e3fb
1 changed files with 13 additions and 2 deletions

View File

@ -1208,14 +1208,24 @@ static HRESULT CALLBACK dict_cb( void *state, const WS_XML_STRING *str, BOOL *fo
{
struct dictionary *dict = state;
HRESULT hr = S_OK;
BYTE *bytes;
int index;
if ((index = find_string( dict, str->bytes, str->length, id )) == -1 ||
(hr = insert_string( dict, str->bytes, str->length, index, id )) == S_OK)
if ((index = find_string( dict, str->bytes, str->length, id )) == -1)
{
*found = TRUE;
return S_OK;
}
if (!(bytes = heap_alloc( str->length ))) return E_OUTOFMEMORY;
memcpy( bytes, str->bytes, str->length );
if ((hr = insert_string( dict, bytes, str->length, index, id )) == S_OK)
{
*found = TRUE;
return S_OK;
}
heap_free( bytes );
*found = FALSE;
return hr;
}
@ -1672,6 +1682,7 @@ static HRESULT build_dict( const BYTE *buf, ULONG buflen, struct dictionary *dic
}
if ((hr = insert_string( dict, bytes, size, index, NULL )) != S_OK)
{
heap_free( bytes );
clear_dict( dict );
return hr;
}