GSettings: Don't free value before using its type
authorRyan Lortie <desrt@desrt.ca>
Sun, 27 Jun 2010 14:11:45 +0000 (10:11 -0400)
committerRyan Lortie <desrt@desrt.ca>
Sun, 27 Jun 2010 14:12:59 +0000 (10:12 -0400)
Fix a bug where the type from g_variant_get_type() was used after
freeing the variant.  This works for base types (since they are cached
and live forever) but not for arrays (where the bug was first seen).

gio/gsettings-tool.c

index d3501f3..04d95e0 100644 (file)
@@ -157,7 +157,7 @@ handle_set (gint   *argc,
   gchar *key;
   gchar *value;
   GSettings *settings;
-  GVariant *v;
+  GVariant *v, *default_v;
   const GVariantType *type;
   GOptionContext *context;
   GOptionEntry entries[] = {
@@ -201,12 +201,12 @@ handle_set (gint   *argc,
   else
     settings = g_settings_new (schema);
 
-  v = g_settings_get_value (settings, key);
-  type = g_variant_get_type (v);
-  g_variant_unref (v);
+  default_v = g_settings_get_value (settings, key);
+  type = g_variant_get_type (default_v);
 
   error = NULL;
   v = g_variant_parse (type, value, NULL, NULL, &error);
+  g_variant_unref (default_v);
   if (v == NULL)
     {
       g_printerr ("%s\n", error->message);