From 10306f9a32ee4ca65283110ac286bb1ba9ef2a01 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 9 May 2018 22:37:41 +0200 Subject: Free g_array_free-related memory leaks g_array_free(a, FALSE) returns "a->data". Callers that do not handle this will leak memory. Convert other users to use the return value instead of direct access to "a->data". Change-Id: I0a29864e8106c0bf09e9573ef29e4474179c4171 Reviewed-on: https://code.wireshark.org/review/27438 Petri-Dish: Peter Wu Tested-by: Petri Dish Buildbot Reviewed-by: Peter Wu --- epan/dfilter/dfilter-macro.c | 4 +--- epan/dissectors/packet-diameter.c | 3 +-- epan/oids.c | 3 +-- epan/radius_dict.l | 6 ++---- epan/stats_tree.c | 2 +- epan/wslua/wslua_pref.c | 4 +--- epan/wslua/wslua_proto_field.c | 8 ++------ 7 files changed, 9 insertions(+), 21 deletions(-) diff --git a/epan/dfilter/dfilter-macro.c b/epan/dfilter/dfilter-macro.c index f94970a895..5ff2493489 100644 --- a/epan/dfilter/dfilter-macro.c +++ b/epan/dfilter/dfilter-macro.c @@ -412,9 +412,7 @@ done: m->parts = (gchar **)g_ptr_array_free(parts, FALSE); g_free(m->args_pos); - m->args_pos = (int*)(void *)args_pos->data; - - g_array_free(args_pos,FALSE); + m->args_pos = (int*)(void *)g_array_free(args_pos, FALSE); m->argc = argc; diff --git a/epan/dissectors/packet-diameter.c b/epan/dissectors/packet-diameter.c index c0911d99f3..136e401bb0 100644 --- a/epan/dissectors/packet-diameter.c +++ b/epan/dissectors/packet-diameter.c @@ -2006,8 +2006,7 @@ dictionary_load(void) } } - vnd_short_vs = (value_string *)vnd_shrt_arr->data; - g_array_free(vnd_shrt_arr,FALSE); + vnd_short_vs = (value_string *)g_array_free(vnd_shrt_arr, FALSE); if ((c = d->cmds)) { for (; c; c = c->next) { diff --git a/epan/oids.c b/epan/oids.c index b30ed2d084..400f7b8ac6 100644 --- a/epan/oids.c +++ b/epan/oids.c @@ -660,8 +660,7 @@ static void register_mibs(void) { } } - hf.hfinfo.strings = vals->data; - g_array_free(vals,FALSE); + hf.hfinfo.strings = g_array_free(vals, FALSE); } #if 0 /* packet-snmp does not handle bits yet */ } else if (smiType->basetype == SMI_BASETYPE_BITS && ( smiEnum = smiGetFirstNamedNumber(smiType) )) { diff --git a/epan/radius_dict.l b/epan/radius_dict.l index 05bfb92585..1313dfb8c2 100644 --- a/epan/radius_dict.l +++ b/epan/radius_dict.l @@ -669,9 +669,8 @@ static void setup_tlvs(gpointer k _U_, gpointer v, gpointer p) { } vs; if (g_hash_table_lookup_extended(state->value_strings, s->name, &key, &vs.p)) { - s->vs = (value_string*)(void *)vs.a->data; g_hash_table_steal(state->value_strings, key); - g_array_free(vs.a, FALSE); + s->vs = (value_string*)(void *)g_array_free(vs.a, FALSE); g_free(key); } } @@ -687,9 +686,8 @@ static void setup_attrs(gpointer k _U_, gpointer v, gpointer p) { } vs; if (g_hash_table_lookup_extended(state->value_strings, a->name, &key, &vs.p) ) { - a->vs = (value_string*)(void *)vs.a->data; g_hash_table_steal(state->value_strings, key); - g_array_free(vs.a, FALSE); + a->vs = (value_string*)(void *)g_array_free(vs.a, FALSE); g_free(key); } diff --git a/epan/stats_tree.c b/epan/stats_tree.c index 51db3b2fb9..be90f8e2ef 100644 --- a/epan/stats_tree.c +++ b/epan/stats_tree.c @@ -1306,7 +1306,7 @@ WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node, stats_tree_format_node_as_str(g_array_index(Children,stat_node*,count), s, format_type, indent, full_path, maxnamelen, sort_column, sort_descending); } - g_array_free(Children,FALSE); + g_array_free(Children, TRUE); } g_free(full_path); diff --git a/epan/wslua/wslua_pref.c b/epan/wslua/wslua_pref.c index a09c2b79a6..4ec4d1076f 100644 --- a/epan/wslua/wslua_pref.c +++ b/epan/wslua/wslua_pref.c @@ -78,9 +78,7 @@ static enum_val_t* get_enum(lua_State *L, int idx) g_array_append_val(es,last); - ret = (enum_val_t*)(void*)es->data; - - g_array_free(es,FALSE); + ret = (enum_val_t*)(void*)g_array_free(es, FALSE); return ret; } diff --git a/epan/wslua/wslua_proto_field.c b/epan/wslua/wslua_proto_field.c index 65de1adb98..ffddd8bec0 100644 --- a/epan/wslua/wslua_proto_field.c +++ b/epan/wslua/wslua_proto_field.c @@ -188,9 +188,7 @@ static value_string* value_string_from_table(lua_State* L, int idx) { lua_pop(L, 1); } - vs32 = (value_string*)(void*)vs->data; - - g_array_free(vs,FALSE); + vs32 = (value_string*)(void*)g_array_free(vs, FALSE); return vs32; } @@ -243,9 +241,7 @@ static val64_string* val64_string_from_table(lua_State* L, int idx) { lua_pop(L, 1); } - vs64 = (val64_string*)(void*)vs->data; - - g_array_free(vs,FALSE); + vs64 = (val64_string*)(void*)g_array_free(vs, FALSE); return vs64; } -- cgit v1.2.3