These are all patches from Kjartan Maraas <kmaraas at gnome dot org>
[platform/upstream/dbus.git] / bus / desktop-file.c
index dd62121..7a96a44 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 2003  CodeFactory AB
  * Copyright (C) 2003  Red Hat Inc.
  *
- * Licensed under the Academic Free License version 1.2
+ * Licensed under the Academic Free License version 2.1
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -460,7 +460,7 @@ parse_key_value (BusDesktopFileParser *parser, DBusError *error)
   
   if (!_dbus_string_find (&parser->data, parser->pos, "\n", &line_end))
     line_end = parser->len;
-
+  
   p = parser->pos;
   key_start = p;
   while (p < line_end &&
@@ -476,6 +476,17 @@ parse_key_value (BusDesktopFileParser *parser, DBusError *error)
     }
 
   /* We ignore locales for now */
+  if (p < line_end && _dbus_string_get_byte (&parser->data, p) == '[')
+    {
+      if (line_end == parser->len)
+       parser->pos = parser->len;
+      else
+       parser->pos = line_end + 1;
+         
+      parser->line_num += 1;
+
+      return TRUE;
+    }
   
   /* Skip space before '=' */
   while (p < line_end && _dbus_string_get_byte (&parser->data, p) == ' ')
@@ -514,12 +525,14 @@ parse_key_value (BusDesktopFileParser *parser, DBusError *error)
   line = new_line (parser);
   if (line == NULL)
     {
+      dbus_free (value);
       parser_free (parser);
       return FALSE;
     }
   
   if (!_dbus_string_init (&key))
     {
+      dbus_free (value);
       parser_free (parser);
       return FALSE;
     }
@@ -527,12 +540,14 @@ parse_key_value (BusDesktopFileParser *parser, DBusError *error)
   if (!_dbus_string_copy_len (&parser->data, key_start, key_end - key_start,
                               &key, 0))
     {
+      dbus_free (value);
       parser_free (parser);
       return FALSE;
     }
   
   if (!_dbus_string_steal_data (&key, &tmp))
     {
+      dbus_free (value);
       parser_free (parser);
       return FALSE;
     }
@@ -647,14 +662,13 @@ bus_desktop_file_load (DBusString *filename,
   parser.pos = 0;
   parser.len = _dbus_string_get_length (&parser.data);
   parser.current_section = -1;
-  
+
   while (parser.pos < parser.len)
     {
       if (_dbus_string_get_byte (&parser.data, parser.pos) == '[')
        {
          if (!parse_section_start (&parser, error))
             {
-              _dbus_string_free (&parser.data);
               return NULL;
             }
        }
@@ -665,7 +679,6 @@ bus_desktop_file_load (DBusString *filename,
        {
          if (!parse_key_value (&parser, error))
             {
-              _dbus_string_free (&parser.data);
               return NULL;
             }
        }