summaryrefslogtreecommitdiff
path: root/gtk/gtkdialog.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-02-26 14:50:25 -0500
committerMatthias Clasen <mclasen@redhat.com>2016-02-26 15:52:19 -0500
commit5ca860dcaf0b636b50fe54cd2abff7e92091bdb3 (patch)
tree551b86582c8943c80e966080005ea706bf76e4e7 /gtk/gtkdialog.c
parent6108c646c57c6c489225f5e5e6484ac282c07bdf (diff)
downloadgtk+-5ca860dcaf0b636b50fe54cd2abff7e92091bdb3.tar.gz
dialog: 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.
Diffstat (limited to 'gtk/gtkdialog.c')
-rw-r--r--gtk/gtkdialog.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c
index ad1828ad62..45dc5bef03 100644
--- a/gtk/gtkdialog.c
+++ b/gtk/gtkdialog.c
@@ -1688,6 +1688,15 @@ typedef struct {
} SubParserData;
static void
+free_action_widget_info (gpointer data)
+{
+ ActionWidgetInfo *item = data;
+
+ g_free (item->widget_name);
+ g_free (item);
+}
+
+static void
parser_start_element (GMarkupParseContext *context,
const gchar *element_name,
const gchar **names,
@@ -1894,12 +1903,9 @@ gtk_dialog_buildable_custom_finished (GtkBuildable *buildable,
if (item->is_default)
gtk_widget_grab_default (GTK_WIDGET (object));
-
- g_free (item->widget_name);
- g_free (item);
}
- g_slist_free (data->items);
+ g_slist_free_full (data->items, free_action_widget_info);
g_string_free (data->string, TRUE);
g_slice_free (SubParserData, data);