From 88e372cd090e9cc4ee81ca368d43f8b4fc91d8a8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 26 Feb 2016 14:55:20 -0500 Subject: [PATCH] infobar: Avoid a memory leak in an error case Parsing could sometimes fail to free some of the data, if a nonexisting widget is referenced. Found by gcc's leak sanitizer. --- gtk/gtkinfobar.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/gtk/gtkinfobar.c b/gtk/gtkinfobar.c index d34ebfd369..e2c64fb008 100644 --- a/gtk/gtkinfobar.c +++ b/gtk/gtkinfobar.c @@ -915,6 +915,15 @@ typedef struct gint col; } SubParserData; +static void +action_widget_info_free (gpointer data) +{ + ActionWidgetInfo *item = data; + + g_free (item->name); + g_free (item); +} + static void parser_start_element (GMarkupParseContext *context, const gchar *element_name, @@ -1096,12 +1105,9 @@ gtk_info_bar_buildable_custom_finished (GtkBuildable *buildable, if (ad->response_id == GTK_RESPONSE_HELP) gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (info_bar->priv->action_area), GTK_WIDGET (object), TRUE); - - g_free (item->name); - g_free (item); } - g_slist_free (data->items); + g_slist_free_full (data->items, action_widget_info_free); g_string_free (data->string, TRUE); g_slice_free (SubParserData, data); }