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.
This commit is contained in:
Ryan Lortie
2012-07-06 13:43:17 -04:00
parent 52a6d7022a
commit ed492a5de2
2 changed files with 17 additions and 5 deletions

View File

@@ -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;
}