[empathy] [empathy_builder_get_file] NULL out passed GObj ptrs if GtkBuilder file broken



commit 577518e4c14b563c32d8486592f2c670acb9b857
Author: Davyd Madeley <davyd madeley id au>
Date:   Tue Sep 1 14:11:47 2009 +1000

    [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 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c
index 3089c46..1b02195 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;
 	}
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]