Bug 550096 – GBookmarkFile parser is not forward compatible
authorEmmanuele Bassi <ebassi@gnome.org>
Sun, 31 Aug 2008 19:53:21 +0000 (19:53 +0000)
committerEmmanuele Bassi <ebassi@src.gnome.org>
Sun, 31 Aug 2008 19:53:21 +0000 (19:53 +0000)
2008-08-31  Emmanuele Bassi  <ebassi@gnome.org>

Bug 550096 – GBookmarkFile parser is not forward compatible

* glib/gbookmarkfile.c:
(parse_bookmark_element), (parse_application_element),
(parse_mime_type_element), (parse_icon_element): Relax the
attributes checking of the GBookmarkFile parser for the
attributes that the desktop bookmark file specification
defines and controls. This allows adding new attributes to
the existing elements in newer versions without breaking the
parser in older ones.

svn path=/trunk/; revision=7418

ChangeLog
glib/gbookmarkfile.c

index 881295c8ae1d1f14a311c47d811f22d8fb4891da..6614ecc2bbea0414e05f44f99d4f7601477b85ce 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2008-08-31  Emmanuele Bassi  <ebassi@gnome.org>
+
+       Bug 550096 – GBookmarkFile parser is not forward compatible
+
+       * glib/gbookmarkfile.c:
+       (parse_bookmark_element), (parse_application_element),
+       (parse_mime_type_element), (parse_icon_element): Relax the
+       attributes checking of the GBookmarkFile parser for the
+       attributes that the desktop bookmark file specification
+       defines and controls. This allows adding new attributes to
+       the existing elements in newer versions without breaking the
+       parser in older ones.
+
 2008-08-28  Ryan Lortie  <desrt@desrt.ca>
 
        Fixup for test case in previous commit.
index 85aa4041fc2c5a8fe9691305a71d1061e7ef415e..83ed6e879d7401f9b502ef5c55efc0e01b1c1135 100644 (file)
@@ -728,6 +728,10 @@ parse_bookmark_element (GMarkupParseContext  *context,
         visited = attribute_values[i];
       else
         {
+          /* bookmark is defined by the XBEL spec, so we need
+           * to error out if the element has different or
+           * missing attributes
+           */
           g_set_error (error, G_MARKUP_ERROR,
                       G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
                       _("Unexpected attribute '%s' for element '%s'"),
@@ -805,17 +809,9 @@ parse_application_element (GMarkupParseContext  *context,
         stamp = attribute_values[i];
       else if (IS_ATTRIBUTE (attr, BOOKMARK_MODIFIED_ATTRIBUTE))
         modified = attribute_values[i];
-      else
-        {
-          g_set_error (error, G_MARKUP_ERROR,
-                      G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
-                      _("Unexpected attribute '%s' for element '%s'"),
-                      attr,
-                      BOOKMARK_APPLICATION_ELEMENT);
-          return;
-        }        
     }
 
+  /* the "name" and "exec" attributes are mandatory */
   if (!name)
     {
       g_set_error (error, G_MARKUP_ERROR,
@@ -892,15 +888,6 @@ parse_mime_type_element (GMarkupParseContext  *context,
     {
       if (IS_ATTRIBUTE (attr, MIME_TYPE_ATTRIBUTE))
         type = attribute_values[i];
-      else
-        {
-          g_set_error (error, G_MARKUP_ERROR,
-                      G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
-                      _("Unexpected attribute '%s' for element '%s'"),
-                      attr,
-                      MIME_TYPE_ELEMENT);
-          return;
-        }        
     }
 
   if (!type)
@@ -939,17 +926,9 @@ parse_icon_element (GMarkupParseContext  *context,
         href = attribute_values[i];
       else if (IS_ATTRIBUTE (attr, BOOKMARK_TYPE_ATTRIBUTE))
         type = attribute_values[i];
-      else
-        {
-          g_set_error (error, G_MARKUP_ERROR,
-                      G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
-                      _("Unexpected attribute '%s' for element '%s'"),
-                      attr,
-                      BOOKMARK_ICON_ELEMENT);
-          return;
-        }        
     }
 
+  /* the "href" attribute is mandatory */       
   if (!href)
     {
       g_set_error (error, G_MARKUP_ERROR,