GSettings: Don't free value before using its type

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).
This commit is contained in:
Ryan Lortie 2010-06-27 10:11:45 -04:00
parent 87fd38bc4d
commit 795d2bf8cf

View 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);