aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavyd Madeley <davyd@madeley.id.au>2009-09-01 12:11:47 +0800
committerDavyd Madeley <davyd@madeley.id.au>2009-09-01 12:11:47 +0800
commit577518e4c14b563c32d8486592f2c670acb9b857 (patch)
tree9d4134975a39be68f0b826dfa163c2744ee76a1d
parent08c465a2d1b55d42834d338c562e7fde42273d0f (diff)
downloadgsoc2013-empathy-577518e4c14b563c32d8486592f2c670acb9b857.tar
gsoc2013-empathy-577518e4c14b563c32d8486592f2c670acb9b857.tar.gz
gsoc2013-empathy-577518e4c14b563c32d8486592f2c670acb9b857.tar.bz2
gsoc2013-empathy-577518e4c14b563c32d8486592f2c670acb9b857.tar.lz
gsoc2013-empathy-577518e4c14b563c32d8486592f2c670acb9b857.tar.xz
gsoc2013-empathy-577518e4c14b563c32d8486592f2c670acb9b857.tar.zst
gsoc2013-empathy-577518e4c14b563c32d8486592f2c670acb9b857.zip
[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.
-rw-r--r--libempathy-gtk/empathy-ui-utils.c12
1 files changed, 11 insertions, 1 deletions
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;
}