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:
Ryan Lortie 2010-06-07 10:18:43 +02:00
parent a0c044b5c6
commit 71c5e3f899
3 changed files with 18 additions and 2 deletions

View File

@ -232,8 +232,20 @@ start_element (GMarkupParseContext *context,
state->schema_root = gvdb_hash_table_insert (state->schema, "");
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
g_set_error (error, G_MARKUP_ERROR,

View File

@ -57,6 +57,7 @@ static const SchemaTest tests[] = {
{ "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*" },
{ "invalid-path", NULL, "*must begin and end with a slash*" },
{ "bad-key", "--allow-any-name", NULL },
{ "bad-key2", NULL, "*invalid name*" },
{ "bad-key2", "--allow-any-name", NULL },

View File

@ -0,0 +1,3 @@
<schemalist>
<schema id='invalid-path' path='/app/myapp'/>
</schemalist>