summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn (J5) Palmieri <johnp@redhat.com>2005-11-30 20:14:30 +0000
committerJohn (J5) Palmieri <johnp@redhat.com>2005-11-30 20:14:30 +0000
commit982592992055de23aa7fee61a72d7c71228c1469 (patch)
treece523ec6b102113f65048db218fc90f33aca6660
parent0ca96ec548a6e4a1e39429f3c0480adfe7e2eab8 (diff)
* bus/desktop-file.c (parse_key_value): Ignore locales allowing
the parser to continue instead of returning error (bus_desktop_file_load): Do not free parser data when parse_section_start or parse_key_value fails because it was already freed by parser_free (patch from Carlos Garcia Campos <carlosgc at gnome.org>)
-rw-r--r--ChangeLog10
-rw-r--r--bus/desktop-file.c17
2 files changed, 23 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 4516ed85..8b5b184b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,14 @@
2005-11-30 John (J5) Palmieri <johnp@redhat.com>
+
+ * bus/desktop-file.c (parse_key_value): Ignore locales allowing
+ the parser to continue instead of returning error
+ (bus_desktop_file_load): Do not free parser data when
+ parse_section_start or parse_key_value fails because it was
+ already freed by parser_free (patch from Carlos Garcia Campos
+ <carlosgc at gnome.org>)
+
+2005-11-30 John (J5) Palmieri <johnp@redhat.com>
+
* dbus/dbus-auth.c, dbus/dbus-connection.c, dbus/dbus-keyring.c,
dbus/dbus-server-debug-pipe.c, glib/dbus-binding-tool-glib.c
glib/dbus-glib-tool.c, glib/dbus-gparser.c, glib/dbus-gproxy.c
diff --git a/bus/desktop-file.c b/bus/desktop-file.c
index 5ba99832..fc985122 100644
--- a/bus/desktop-file.c
+++ b/bus/desktop-file.c
@@ -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) == ' ')
@@ -647,14 +658,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 +675,6 @@ bus_desktop_file_load (DBusString *filename,
{
if (!parse_key_value (&parser, error))
{
- _dbus_string_free (&parser.data);
return NULL;
}
}