[glib] GSettings: verify path validity on constructors
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GSettings: verify path validity on constructors
- Date: Thu, 24 Oct 2013 13:54:09 +0000 (UTC)
commit 6568843624e9f46a3c51cd8c1a6670896a48f1fb
Author: Ryan Lortie <desrt desrt ca>
Date: Wed Oct 23 16:42:12 2013 -0400
GSettings: verify path validity on constructors
Don't allow constructing GSettings objects with invalid paths.
https://bugzilla.gnome.org/show_bug.cgi?id=704802
gio/gsettings.c | 27 +++++++++++++++++++++++++--
1 files changed, 25 insertions(+), 2 deletions(-)
---
diff --git a/gio/gsettings.c b/gio/gsettings.c
index 2f23f09..f31ad3f 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -866,6 +866,21 @@ g_settings_new (const gchar *schema_id)
NULL);
}
+static gboolean
+path_is_valid (const gchar *path)
+{
+ if (!path)
+ return FALSE;
+
+ if (path[0] != '/')
+ return FALSE;
+
+ if (!g_str_has_suffix (path, "/"))
+ return FALSE;
+
+ return strstr (path, "//") == NULL;
+}
+
/**
* g_settings_new_with_path:
* @schema_id: the id of the schema
@@ -881,6 +896,10 @@ g_settings_new (const gchar *schema_id)
* It is a programmer error to call this function for a schema that
* has an explicitly specified path.
*
+ * It is a programmer error if @path is not a valid path. A valid path
+ * begins and ends with '/' and does not contain two consecutive '/'
+ * characters.
+ *
* Returns: a new #GSettings object
*
* Since: 2.26
@@ -890,7 +909,7 @@ g_settings_new_with_path (const gchar *schema_id,
const gchar *path)
{
g_return_val_if_fail (schema_id != NULL, NULL);
- g_return_val_if_fail (path != NULL, NULL);
+ g_return_val_if_fail (path_is_valid (path), NULL);
return g_object_new (G_TYPE_SETTINGS,
"schema-id", schema_id,
@@ -952,7 +971,7 @@ g_settings_new_with_backend_and_path (const gchar *schema_id,
{
g_return_val_if_fail (schema_id != NULL, NULL);
g_return_val_if_fail (G_IS_SETTINGS_BACKEND (backend), NULL);
- g_return_val_if_fail (path != NULL, NULL);
+ g_return_val_if_fail (path_is_valid (path), NULL);
return g_object_new (G_TYPE_SETTINGS,
"schema-id", schema_id,
@@ -1000,6 +1019,10 @@ g_settings_new_full (GSettingsSchema *schema,
GSettingsBackend *backend,
const gchar *path)
{
+ g_return_val_if_fail (schema != NULL, NULL);
+ g_return_val_if_fail (backend == NULL || G_IS_SETTINGS_BACKEND (backend), NULL);
+ g_return_val_if_fail (path == NULL || path_is_valid (path), NULL);
+
return g_object_new (G_TYPE_SETTINGS,
"settings-schema", schema,
"backend", backend,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]