[glib] g_settings_get: check validity of format string



commit 396d40af237db00e1014520cf6858cfed30bbc51
Author: Lars Uebernickel <lars uebernic de>
Date:   Fri Dec 6 16:01:48 2013 +0100

    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 files changed, 7 insertions(+), 0 deletions(-)
---
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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]