From 577518e4c14b563c32d8486592f2c670acb9b857 Mon Sep 17 00:00:00 2001 From: Davyd Madeley Date: Tue, 1 Sep 2009 14:11:47 +1000 Subject: [empathy_builder_get_file] NULL out passed GObj ptrs if GtkBuilder file broken If the GtkBuilder file passed to empathy_builder_get_file is broken, it returns NULL, but doesn't touch the contents of any pointers passed to retrieve GObjects. In several places we start using these pointers without checking whether the file was actually setup, which causes Empathy to crash. Ideally callers of empathy_builder_get_file() should check whether or not the function returned correctly before using any of the passed pointers, but in case they don't, make sure we're not passing pointers to random memory. --- libempathy-gtk/empathy-ui-utils.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'libempathy-gtk') diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index 3089c46ea..1b02195d2 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -99,9 +99,19 @@ builder_get_file_valist (const gchar *filename, gui = gtk_builder_new (); if (!gtk_builder_add_from_file (gui, filename, &error)) { - g_critical ("GtkBuilder Error: %s", error->message); + g_critical ("GtkBuilder Error (%s): %s", + filename, error->message); g_clear_error (&error); g_object_unref (gui); + + /* we need to iterate and set all of the pointers to NULL */ + for (name = first_object; name; + name = va_arg (args, const gchar *)) { + object_ptr = va_arg (args, GObject**); + + *object_ptr = NULL; + } + return NULL; } -- cgit v1.2.3