diff options
author | Peter Wu <peter@lekensteyn.nl> | 2017-08-28 12:40:38 +0100 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2017-08-28 23:49:40 +0000 |
commit | a303bc1f2982e59885c9787d3f81e1ced4b5f342 (patch) | |
tree | e5618f88c6603738ca406e69954a5fe8a2400bba /plugins | |
parent | 6cd7d99cb98c17c593948753d2a3b2a65d4f6040 (diff) |
transum: clear the list of wanted hfids in file cleanup routine
Be sure to disable the wanted hfids list when the transum dissector is
cleaned up, otherwise it will leak memory when reloading a file while
the transum dissector is enabled.
Change-Id: I2af8edab89da8b3cfb65e19726e1d2546a1dc8d4
Reviewed-on: https://code.wireshark.org/review/23261
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/transum/packet-transum.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/plugins/transum/packet-transum.c b/plugins/transum/packet-transum.c index aa1db0f1b4..c70028b15c 100644 --- a/plugins/transum/packet-transum.c +++ b/plugins/transum/packet-transum.c @@ -141,11 +141,6 @@ static wmem_map_t *output_rrpd; */ static wmem_list_t *temp_rsp_rrpd_list = NULL; /* Reuse these for speed and efficient memory use - issue a warning if we run out */ -/* - * GArray of the hfids of all fields we're interested in. - */ -GArray *wanted_fields; - static gint ett_transum = -1; static gint ett_transum_header = -1; static gint ett_transum_data = -1; @@ -707,7 +702,7 @@ static void init_globals(void) temp_rsp_rrpd_list = wmem_list_new(wmem_file_scope()); /* Indicate what fields we're interested in. */ - wanted_fields = g_array_new(FALSE, FALSE, (guint)sizeof(int)); + GArray *wanted_fields = g_array_sized_new(FALSE, FALSE, (guint)sizeof(int), HF_INTEREST_END_OF_LIST); for (int i = 0; i < HF_INTEREST_END_OF_LIST; i++) { g_array_append_val(wanted_fields, hf_of_interest[i].hf); @@ -746,6 +741,13 @@ static void init_globals(void) output_rrpd = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal); } +/* Undo capture file-specific initializations. */ +static void cleanup_globals(void) +{ + /* Clear the list of wanted fields as it will be reinitialized. */ + set_postdissector_wanted_hfids(transum_handle, NULL); +} + /* This function adds the RTE data to the tree. The summary ptr is currently not used but will be used for summariser information once this feature has been ported from the LUA code. */ @@ -1195,6 +1197,7 @@ proto_register_transum(void) transum_handle = register_dissector("transum", dissect_transum, proto_transum); register_init_routine(init_globals); + register_cleanup_routine(cleanup_globals); register_postdissector(transum_handle); } |