eet: Stop freeing allocated memory in descriptor_decode

There are other paths that free this memory, so it ends up freed by the
EET_G_UNKNOWN_NESTED path, yet remains on the list.

It makes more sense to have all the callers deal with this memory.

Differential Revision: https://phab.enlightenment.org/D7280

Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
This commit is contained in:
Derek Foreman 2018-11-13 14:30:09 -06:00
parent 5889307f4c
commit 1e498286d9
1 changed files with 27 additions and 18 deletions

View File

@ -3568,6 +3568,7 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
char *p;
int size, i;
Eet_Data_Chunk chnk;
Eina_Bool need_free = EINA_FALSE;
if (_eet_data_words_bigendian == -1)
{
@ -3590,6 +3591,7 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
else
{
data = edd->func.mem_alloc(edd->size);
need_free = EINA_TRUE;
}
if (!data)
@ -3604,8 +3606,6 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
}
_eet_freelist_all_ref(context);
if (data && !data_out)
_eet_freelist_add(context, data);
memset(&chnk, 0, sizeof(Eet_Data_Chunk));
eet_data_chunk_get(ed, &chnk, data_in, size_in);
@ -3775,6 +3775,7 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
return data;
error:
if (need_free) free(data);
eet_node_del(result);
_eet_freelist_all_unref(context);
@ -3832,14 +3833,17 @@ eet_data_get_list(Eet_Free_Context *context,
size,
on_error);
else
STRUCT_TYPE_DECODE(data_ret,
context,
ed,
subtype,
echnk->data,
echnk->size,
-1,
on_error);
{
STRUCT_TYPE_DECODE(data_ret,
context,
ed,
subtype,
echnk->data,
echnk->size,
-1,
on_error);
if (subtype) _eet_freelist_add(context, data_ret);
}
if (edd)
{
@ -3920,14 +3924,18 @@ eet_data_get_hash(Eet_Free_Context *context,
size,
on_error);
else
STRUCT_TYPE_DECODE(data_ret,
context,
ed,
ede ? ede->subtype : NULL,
echnk->data,
echnk->size,
-1,
on_error);
{
STRUCT_TYPE_DECODE(data_ret,
context,
ed,
ede ? ede->subtype : NULL,
echnk->data,
echnk->size,
-1,
on_error);
if (ede ? ede->subtype : NULL) _eet_freelist_add(context, data_ret);
}
if (edd)
{
@ -4702,6 +4710,7 @@ eet_data_get_unknown(Eet_Free_Context *context,
{
ptr = (void **)(((char *)data));
*ptr = (void *)data_ret;
_eet_freelist_add(context, data_ret);
}
}
else