tvbparse: fix memleak

Use same wmem_epan_scope() as "w" (tvbparse_wanted_t).

Change-Id: I73fdb1fb3b55a91b7bb0fc36e435024c6f0b3d73
Ping-Bug: 12790
Reviewed-on: https://code.wireshark.org/review/17361
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
This commit is contained in:
Peter Wu 2016-08-28 19:15:01 +02:00
parent 16b7128d1a
commit 0bae8424fe
1 changed files with 10 additions and 0 deletions

View File

@ -433,6 +433,14 @@ static int cond_one_of(tvbparse_t* tt, const int offset, const tvbparse_wanted_t
return -1;
}
static gboolean
tvbparse_wanted_cleanup_cb(wmem_allocator_t* allocator _U_, wmem_cb_event_t event _U_, void *user_data)
{
tvbparse_wanted_t* w = (tvbparse_wanted_t *)user_data;
g_ptr_array_free(w->control.elems, TRUE);
return FALSE;
}
tvbparse_wanted_t* tvbparse_set_oneof(const int id,
const void* data,
tvbparse_action_t before_cb,
@ -448,6 +456,7 @@ tvbparse_wanted_t* tvbparse_set_oneof(const int id,
w->before = before_cb;
w->after = after_cb;
w->control.elems = g_ptr_array_new();
wmem_register_callback(wmem_epan_scope(), tvbparse_wanted_cleanup_cb, w);
va_start(ap,after_cb);
@ -625,6 +634,7 @@ tvbparse_wanted_t* tvbparse_set_seq(const int id,
w->before = before_cb;
w->after = after_cb;
w->control.elems = g_ptr_array_new();
wmem_register_callback(wmem_epan_scope(), tvbparse_wanted_cleanup_cb, w);
va_start(ap,after_cb);