diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2015-12-23 08:41:07 +0100 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2015-12-23 08:45:50 +0000 |
commit | 976642ab0a6099010d08113fe4080010d39ab766 (patch) | |
tree | 7993d31f5434e585981cd0c523b63569b7b48ce9 | |
parent | ab754d6ba4c0bc6d8d00aec137d8b1e97331d1f4 (diff) |
ui: Plug memory leak in decode_build_reset_list.
The strings passed to decode_build_reset_list() is not freed, so
ensure we cleanup in decode_clear_all().
Change-Id: Ib68bde71403e260199482831272beb161fe033f9
Reviewed-on: https://code.wireshark.org/review/12836
Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org>
-rw-r--r-- | epan/packet.h | 2 | ||||
-rw-r--r-- | ui/decode_as_utils.c | 11 | ||||
-rw-r--r-- | ui/gtk/decode_as_dlg.c | 2 |
3 files changed, 8 insertions, 7 deletions
diff --git a/epan/packet.h b/epan/packet.h index cc13140bf6..c748caabd4 100644 --- a/epan/packet.h +++ b/epan/packet.h @@ -109,7 +109,7 @@ typedef enum { } dissector_table_allow_e; typedef void (*DATFunc) (const gchar *table_name, ftenum_t selector_type, - gpointer key, gpointer value, gpointer user_data); + const gpointer key, gpointer value, gpointer user_data); typedef void (*DATFunc_handle) (const gchar *table_name, gpointer value, gpointer user_data); typedef void (*DATFunc_table) (const gchar *table_name, const gchar *ui_name, diff --git a/ui/decode_as_utils.c b/ui/decode_as_utils.c index 93e165bb58..22ff62ab26 100644 --- a/ui/decode_as_utils.c +++ b/ui/decode_as_utils.c @@ -146,8 +146,7 @@ read_set_decode_as_entries(gchar *key, const gchar *value, } } if (is_valid) { - decode_build_reset_list(g_strdup(values[0]), selector_type, - g_strdup(values[1]), NULL, NULL); + decode_build_reset_list(values[0], selector_type, values[1], NULL, NULL); } } else { retval = PREFS_SET_SYNTAX_ERR; @@ -183,13 +182,13 @@ load_decode_as_entries(void) void decode_build_reset_list (const gchar *table_name, ftenum_t selector_type, - gpointer key, gpointer value _U_, + const gpointer key, gpointer value _U_, gpointer user_data _U_) { dissector_delete_item_t *item; item = g_new(dissector_delete_item_t,1); - item->ddi_table_name = table_name; + item->ddi_table_name = g_strdup(table_name); item->ddi_selector_type = selector_type; switch (selector_type) { @@ -204,7 +203,7 @@ decode_build_reset_list (const gchar *table_name, ftenum_t selector_type, case FT_STRINGZ: case FT_UINT_STRING: case FT_STRINGZPAD: - item->ddi_selector.sel_string = (char *)key; + item->ddi_selector.sel_string = g_strdup((char *)key); break; default: @@ -240,11 +239,13 @@ decode_clear_all(void) case FT_STRINGZPAD: dissector_reset_string(item->ddi_table_name, item->ddi_selector.sel_string); + g_free(item->ddi_selector.sel_string); break; default: g_assert_not_reached(); } + g_free((gchar *)item->ddi_table_name); g_free(item); } g_slist_free(dissector_reset_list); diff --git a/ui/gtk/decode_as_dlg.c b/ui/gtk/decode_as_dlg.c index a0707783d9..64eb232b14 100644 --- a/ui/gtk/decode_as_dlg.c +++ b/ui/gtk/decode_as_dlg.c @@ -685,7 +685,7 @@ decode_simple (GtkWidget *notebook_pg) if (add_reset_list) { selector_type = g_new(guint,1); *selector_type = GPOINTER_TO_UINT(value_ptr); - decode_build_reset_list(g_strdup(table_name), FT_UINT32, selector_type, NULL, NULL); + decode_build_reset_list(table_name, FT_UINT32, selector_type, NULL, NULL); } } |