infobar: Avoid a memory leak in an error case

Parsing <action-widgets> could sometimes fail to free
some of the data, if a nonexisting widget is referenced.
Found by gcc's leak sanitizer.
This commit is contained in:
Matthias Clasen 2016-02-26 14:55:20 -05:00
parent c784d5d700
commit 88e372cd09

View File

@ -915,6 +915,15 @@ typedef struct
gint col; gint col;
} SubParserData; } SubParserData;
static void
action_widget_info_free (gpointer data)
{
ActionWidgetInfo *item = data;
g_free (item->name);
g_free (item);
}
static void static void
parser_start_element (GMarkupParseContext *context, parser_start_element (GMarkupParseContext *context,
const gchar *element_name, const gchar *element_name,
@ -1096,12 +1105,9 @@ gtk_info_bar_buildable_custom_finished (GtkBuildable *buildable,
if (ad->response_id == GTK_RESPONSE_HELP) if (ad->response_id == GTK_RESPONSE_HELP)
gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (info_bar->priv->action_area), gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (info_bar->priv->action_area),
GTK_WIDGET (object), TRUE); 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_string_free (data->string, TRUE);
g_slice_free (SubParserData, data); g_slice_free (SubParserData, data);
} }