diff options
author | Davyd Madeley <davyd@madeley.id.au> | 2009-09-01 12:11:47 +0800 |
---|---|---|
committer | Davyd Madeley <davyd@madeley.id.au> | 2009-09-01 12:11:47 +0800 |
commit | 577518e4c14b563c32d8486592f2c670acb9b857 (patch) | |
tree | 9d4134975a39be68f0b826dfa163c2744ee76a1d | |
parent | 08c465a2d1b55d42834d338c562e7fde42273d0f (diff) | |
download | gsoc2013-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.c | 12 |
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; } |