aboutsummaryrefslogtreecommitdiffstats
path: root/epan/tvbparse.c
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2016-08-28 19:15:01 +0200
committerPeter Wu <peter@lekensteyn.nl>2016-08-28 22:07:22 +0000
commit0bae8424fe651ea5de1f7e160666781e60ce3c86 (patch)
treeeb91c490321a50c7b4e1f9fe30f122d7a76c90b6 /epan/tvbparse.c
parent16b7128d1a4b4c80d24d5a10e32a5787727858a9 (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.c10
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);