[glib/glib-2-32] GSettings: be more careful about keys names with /
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/glib-2-32] GSettings: be more careful about keys names with /
- Date: Sat, 14 Jul 2012 23:23:25 +0000 (UTC)
commit e6f659a898595ba944bd02f0509b14694d1c26e7
Author: Ryan Lortie <desrt desrt ca>
Date: Fri Jul 6 13:43:17 2012 -0400
GSettings: be more careful about keys names with /
Prevent attempts to access keys ending with slashes that exist in the
schema file as references to child schemas.
Also: don't emit change signals for these same keys.
gio/gsettings.c | 20 ++++++++++++++++----
gio/gsettingsschema.c | 2 +-
2 files changed, 17 insertions(+), 5 deletions(-)
---
diff --git a/gio/gsettings.c b/gio/gsettings.c
index 219630b..a6ee776 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -279,8 +279,14 @@ g_settings_real_change_event (GSettings *settings,
keys = g_settings_schema_list (settings->priv->schema, &n_keys);
for (i = 0; i < n_keys; i++)
- g_signal_emit (settings, g_settings_signals[SIGNAL_CHANGED],
- keys[i], g_quark_to_string (keys[i]));
+ {
+ const gchar *key = g_quark_to_string (keys[i]);
+
+ if (g_str_has_suffix (key, "/"))
+ continue;
+
+ g_signal_emit (settings, g_settings_signals[SIGNAL_CHANGED], keys[i], key);
+ }
return FALSE;
}
@@ -297,8 +303,14 @@ g_settings_real_writable_change_event (GSettings *settings,
keys = g_settings_schema_list (settings->priv->schema, &n_keys);
for (i = 0; i < n_keys; i++)
- g_signal_emit (settings, g_settings_signals[SIGNAL_WRITABLE_CHANGED],
- keys[i], g_quark_to_string (keys[i]));
+ {
+ const gchar *key = g_quark_to_string (keys[i]);
+
+ if (g_str_has_suffix (key, "/"))
+ continue;
+
+ g_signal_emit (settings, g_settings_signals[SIGNAL_WRITABLE_CHANGED], keys[i], key);
+ }
return FALSE;
}
diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
index bdb9bab..f8be19f 100644
--- a/gio/gsettingsschema.c
+++ b/gio/gsettingsschema.c
@@ -636,7 +636,7 @@ g_settings_schema_get_value (GSettingsSchema *schema,
value = gvdb_table_get_raw_value (schema->table, key);
- if G_UNLIKELY (value == NULL)
+ if G_UNLIKELY (value == NULL || !g_variant_is_of_type (value, G_VARIANT_TYPE_TUPLE))
g_error ("Settings schema '%s' does not contain a key named '%s'", schema->id, key);
iter = g_variant_iter_new (value);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]