diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c index 5f8a43762..486747421 100644 --- a/gio/glib-compile-schemas.c +++ b/gio/glib-compile-schemas.c @@ -1055,7 +1055,9 @@ parse_state_start_schema (ParseState *state, if (list_of) { - if (!g_hash_table_lookup (state->schema_table, list_of)) + SchemaState *tmp; + + if (!(tmp = g_hash_table_lookup (state->schema_table, list_of))) { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, @@ -1063,10 +1065,24 @@ parse_state_start_schema (ParseState *state, "existing schema '%s'"), id, list_of); return; } + + if (tmp->path) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + _("Can not be a list of a schema with a path")); + return; + } } if (extends) { + if (extends->path) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + _("Can not extend a schema with a path")); + return; + } + if (list_of) { if (extends->list_of == NULL) @@ -1104,6 +1120,13 @@ parse_state_start_schema (ParseState *state, return; } + if (path && list_of && !g_str_has_suffix (path, ":/")) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + _("the path of a list must end with ':/'")); + return; + } + state->schema_state = schema_state_new (path, gettext_domain, extends, extends_name, list_of); g_hash_table_insert (state->schema_table, g_strdup (id),