diff -up GConf-3.2.3/gconf/gconf-dbus.c.use-after-free GConf-3.2.3/gconf/gconf-dbus.c
--- GConf-3.2.3/gconf/gconf-dbus.c.use-after-free	2011-10-26 17:42:49.000000000 +0200
+++ GConf-3.2.3/gconf/gconf-dbus.c	2012-01-03 11:21:57.000000000 +0100
@@ -1129,6 +1129,7 @@ gconf_engine_get_fuller (GConfEngine *co
   gboolean is_default = FALSE;
   gboolean is_writable = TRUE;
   gchar *schema_name = NULL;
+  const gchar *const_schema_name = NULL;
   DBusMessage *message, *reply;
   DBusError error;
   DBusMessageIter iter;
@@ -1222,12 +1223,11 @@ gconf_engine_get_fuller (GConfEngine *co
 					       &val,
 					       &is_default,
 					       &is_writable,
-					       &schema_name);
-  
-  dbus_message_unref (reply);
+					       &const_schema_name);
   
   if (!success)
     {
+      dbus_message_unref (reply);
       if (err)
 	g_set_error (err, GCONF_ERROR,
 		     GCONF_ERROR_FAILED,
@@ -1242,13 +1242,15 @@ gconf_engine_get_fuller (GConfEngine *co
   if (is_writable_p)
     *is_writable_p = !!is_writable;
   
-  if (schema_name && schema_name[0] != '/')
+  if (const_schema_name && const_schema_name[0] != '/')
     {
-      schema_name = NULL;
+      const_schema_name = NULL;
     }
   
   if (schema_name_p)
-    *schema_name_p = g_strdup (schema_name);
+    *schema_name_p = g_strdup (const_schema_name);
+
+  dbus_message_unref (reply);
   
   return val;
 }
@@ -2393,7 +2395,7 @@ handle_notify (DBusConnection *connectio
 	       GConfEngine *conf2)
 {
   GConfEngine *conf;
-  gchar *key, *schema_name;
+  const gchar *key, *schema_name;
   gboolean is_default, is_writable;
   DBusMessageIter iter;
   GConfValue *value;
diff -up GConf-3.2.3/gconf/gconf-dbus-utils.c.use-after-free GConf-3.2.3/gconf/gconf-dbus-utils.c
--- GConf-3.2.3/gconf/gconf-dbus-utils.c.use-after-free	2011-07-04 15:33:10.000000000 +0200
+++ GConf-3.2.3/gconf/gconf-dbus-utils.c	2012-01-03 11:20:06.000000000 +0100
@@ -562,18 +562,18 @@ utils_append_entry_values_stringified (D
 
 gboolean
 gconf_dbus_utils_get_entry_values (DBusMessageIter  *main_iter,
-				   gchar           **key_p,
+				   const gchar     **key_p,
 				   GConfValue      **value_p,
 				   gboolean         *is_default_p,
 				   gboolean         *is_writable_p,
-				   gchar           **schema_name_p)
+				   const gchar     **schema_name_p)
 {
   DBusMessageIter  struct_iter;
-  gchar           *key;
+  const gchar     *key;
   GConfValue      *value;
   gboolean         is_default;
   gboolean         is_writable;
-  gchar           *schema_name;
+  const gchar     *schema_name;
 
   g_return_val_if_fail (dbus_message_iter_get_arg_type (main_iter) == DBUS_TYPE_STRUCT,
 			FALSE);
@@ -587,7 +587,7 @@ gconf_dbus_utils_get_entry_values (DBusM
   value = utils_get_value (&struct_iter);
 
   dbus_message_iter_next (&struct_iter);
-  schema_name = (gchar *) utils_get_optional_string (&struct_iter);
+  schema_name = utils_get_optional_string (&struct_iter);
 
   dbus_message_iter_next (&struct_iter);
   dbus_message_iter_get_basic (&struct_iter, &is_default);
diff -up GConf-3.2.3/gconf/gconf-dbus-utils.h.use-after-free GConf-3.2.3/gconf/gconf-dbus-utils.h
--- GConf-3.2.3/gconf/gconf-dbus-utils.h.use-after-free	2011-10-23 22:08:36.000000000 +0200
+++ GConf-3.2.3/gconf/gconf-dbus-utils.h	2012-01-03 11:20:23.000000000 +0100
@@ -85,11 +85,11 @@ void        gconf_dbus_utils_append_entr
 						 gboolean           is_writable,
 						 const gchar       *schema_name);
 gboolean    gconf_dbus_utils_get_entry_values   (DBusMessageIter   *iter,
-						 gchar            **key,
+						 const gchar      **key,
 						 GConfValue       **value,
 						 gboolean          *is_default,
 						 gboolean          *is_writable,
-						 gchar            **schema_name);
+						 const gchar      **schema_name);
 
 void gconf_dbus_utils_append_entries (DBusMessageIter *iter,
 				      GSList          *entries);
