diff options
author | Peter Wu <peter@lekensteyn.nl> | 2016-08-28 19:15:01 +0200 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2016-08-28 22:07:22 +0000 |
commit | 0bae8424fe651ea5de1f7e160666781e60ce3c86 (patch) | |
tree | eb91c490321a50c7b4e1f9fe30f122d7a76c90b6 /epan/tvbparse.c | |
parent | 16b7128d1a4b4c80d24d5a10e32a5787727858a9 (diff) |
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>
Diffstat (limited to 'epan/tvbparse.c')
-rw-r--r-- | epan/tvbparse.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/epan/tvbparse.c b/epan/tvbparse.c index 934ac9792d..ddb9294b03 100644 --- a/epan/tvbparse.c +++ b/epan/tvbparse.c @@ -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); |