summaryrefslogtreecommitdiff
path: root/extcap.c
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2017-02-27 12:32:16 +0100
committerDario Lombardo <lomato@gmail.com>2017-02-27 13:25:59 +0000
commit8851c1c56eb40432b6acd407e92da927ed909207 (patch)
tree151c7368aac376df78a7557b39cc86bcc6a0ea8e /extcap.c
parenta29fe9d76afe04ae80caebfb4239d3b5a8318183 (diff)
downloadwireshark-8851c1c56eb40432b6acd407e92da927ed909207.tar.gz
extcap: remove leak in interface lists.
Change-Id: Ib57292afc88cd32736b78a901385cfdde84c46c9 Reviewed-on: https://code.wireshark.org/review/20297 Reviewed-by: Roland Knall <rknall@gmail.com> Petri-Dish: Roland Knall <rknall@gmail.com> Reviewed-by: Dario Lombardo <lomato@gmail.com>
Diffstat (limited to 'extcap.c')
-rw-r--r--extcap.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/extcap.c b/extcap.c
index 42c2d6ee0d..260032096d 100644
--- a/extcap.c
+++ b/extcap.c
@@ -1337,11 +1337,20 @@ extcap_ensure_interface(const gchar * toolname)
return element;
}
+static void remove_extcap_entry(gpointer entry, gpointer data _U_)
+{
+ extcap_interface *int_iter = (extcap_interface*)entry;
+
+ if (int_iter->if_type == EXTCAP_SENTENCE_EXTCAP)
+ g_free(int_iter);
+}
+
static gboolean cb_load_interfaces(const gchar *extcap, const gchar *ifname _U_, gchar *output _U_, void *data _U_,
char **err_str _U_)
{
GList *interfaces = NULL, *walker = NULL;
extcap_interface *int_iter = NULL;
+ gchar *toolname = g_path_get_basename(extcap);
GList * interface_keys = g_hash_table_get_keys(_loaded_interfaces);
@@ -1355,12 +1364,11 @@ static gboolean cb_load_interfaces(const gchar *extcap, const gchar *ifname _U_,
{
int_iter = (extcap_interface *)walker->data;
- gchar * toolname = g_path_get_basename(extcap);
extcap_info * element = extcap_ensure_interface(toolname);
if ( element == NULL )
{
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, "Cannot store interface %s", extcap );
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, "Cannot store interface %s", extcap);
walker = g_list_next(walker);
continue;
}
@@ -1416,6 +1424,10 @@ static gboolean cb_load_interfaces(const gchar *extcap, const gchar *ifname _U_,
walker = g_list_next(walker);
}
+ g_list_foreach(interfaces, remove_extcap_entry, NULL);
+ g_list_free(interfaces);
+ g_list_free(interface_keys);
+ g_free(toolname);
return TRUE;
}