[glib] Add 3 new restrictions to the schema compiler



commit f8cb2a60b9fb79f4d3719f842d71245d844ee9c0
Author: Ryan Lortie <desrt desrt ca>
Date:   Thu Sep 9 16:28:18 2010 -0400

    Add 3 new restrictions to the schema compiler
    
     - can not extend schemas that already have paths
     - can not form list of schemas that already have paths
     - the path of a list schema, if given, must end with ':/'

 gio/glib-compile-schemas.c |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)
---
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c
index 5f8a437..4867474 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),



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