mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-06-05 12:20:13 +02:00
Bug 620496 - schema compiler: reject invalid paths
The GSettings schema compiler was accepting any string as a path. It is probably quite a common mistake to suspect that '/apps/foo' is a valid path name when this will cause all sorts of trouble later. Check for this case and report the error.
This commit is contained in:
parent
a0c044b5c6
commit
71c5e3f899
@ -232,8 +232,20 @@ start_element (GMarkupParseContext *context,
|
|||||||
state->schema_root = gvdb_hash_table_insert (state->schema, "");
|
state->schema_root = gvdb_hash_table_insert (state->schema, "");
|
||||||
|
|
||||||
if (path != NULL)
|
if (path != NULL)
|
||||||
gvdb_hash_table_insert_string (state->schema,
|
{
|
||||||
".path", path);
|
if (!g_str_has_prefix (path, "/") ||
|
||||||
|
!g_str_has_suffix (path, "/"))
|
||||||
|
{
|
||||||
|
g_set_error (error, G_MARKUP_ERROR,
|
||||||
|
G_MARKUP_ERROR_INVALID_CONTENT,
|
||||||
|
"a path, if given, must begin and "
|
||||||
|
"end with a slash");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gvdb_hash_table_insert_string (state->schema,
|
||||||
|
".path", path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
g_set_error (error, G_MARKUP_ERROR,
|
g_set_error (error, G_MARKUP_ERROR,
|
||||||
|
@ -57,6 +57,7 @@ static const SchemaTest tests[] = {
|
|||||||
{ "default-not-in-choices", NULL, "*<default> contains string not in <choices>*" },
|
{ "default-not-in-choices", NULL, "*<default> contains string not in <choices>*" },
|
||||||
{ "array-default-not-in-choices", NULL, "*<default> contains string not in <choices>*" },
|
{ "array-default-not-in-choices", NULL, "*<default> contains string not in <choices>*" },
|
||||||
{ "bad-key", NULL, "*invalid name*" },
|
{ "bad-key", NULL, "*invalid name*" },
|
||||||
|
{ "invalid-path", NULL, "*must begin and end with a slash*" },
|
||||||
{ "bad-key", "--allow-any-name", NULL },
|
{ "bad-key", "--allow-any-name", NULL },
|
||||||
{ "bad-key2", NULL, "*invalid name*" },
|
{ "bad-key2", NULL, "*invalid name*" },
|
||||||
{ "bad-key2", "--allow-any-name", NULL },
|
{ "bad-key2", "--allow-any-name", NULL },
|
||||||
|
3
gio/tests/schema-tests/invalid-path.gschema.xml
Normal file
3
gio/tests/schema-tests/invalid-path.gschema.xml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<schemalist>
|
||||||
|
<schema id='invalid-path' path='/app/myapp'/>
|
||||||
|
</schemalist>
|
Loading…
x
Reference in New Issue
Block a user