From 396d40af237db00e1014520cf6858cfed30bbc51 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Fri, 6 Dec 2013 16:01:48 +0100 Subject: [PATCH] g_settings_get: check validity of format string Allow only format strings that copy all values (i.e, don't contain '&'), as the returned pointers might become invalid in some rare cases. Since this is technically an API break, this patch only prints a critical when a faulty format string is detected, but still fetches the values. https://bugzilla.gnome.org/show_bug.cgi?id=719979 --- gio/gsettings.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gio/gsettings.c b/gio/gsettings.c index e0407de..62a1708 100644 --- a/gio/gsettings.c +++ b/gio/gsettings.c @@ -1528,6 +1528,13 @@ g_settings_get (GSettings *settings, value = g_settings_get_value (settings, key); + if (!g_variant_check_format_string (value, format, TRUE)) + { + g_critical ("%s: invalid format string for key '%s' from schema '%s'. " + "This call will probably stop working with a future version of glib.", + G_STRFUNC, key, g_settings_schema_get_id (settings->priv->schema)); + } + va_start (ap, format); g_variant_get_va (value, format, NULL, &ap); va_end (ap); -- 2.7.4