From 4c1343a22c1e1a3d8d5e210ba3c34bd4c21d4bec Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Wed, 27 Jun 2007 04:03:35 +0000 Subject: [PATCH] Plug leaks in error code paths * gtk/gtkbuilderparser.c: Plug leaks in error code paths svn path=/trunk/; revision=18254 --- ChangeLog | 4 ++++ gtk/gtkbuilderparser.c | 14 ++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 73a2c3b845..e6ff100657 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-06-27 Johan Dahlin + + * gtk/gtkbuilderparser.c: Plug leaks in error code paths + 2007-06-26 Johan Dahlin * tests/buildertest.c (test_object_properties): diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index ea2df67e64..87fd6231aa 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -38,8 +38,8 @@ #include "gtktypeutils.h" #include "gtkalias.h" -static void free_property_info (PropertyInfo *info, - gpointer user_data); +static void free_property_info (PropertyInfo *info); +static void free_object_info (ObjectInfo *info); static inline void state_push (ParserData *data, gpointer info) @@ -196,6 +196,8 @@ parse_object (ParserData *data, if (child_info && strcmp (child_info->tag.name, "object") == 0) { error_invalid_tag (data, element_name, NULL, error); + if (child_info) + free_object_info ((ObjectInfo*)child_info); return; } @@ -288,6 +290,8 @@ parse_child (ParserData *data, if (!object_info || strcmp (object_info->tag.name, "object") != 0) { error_invalid_tag (data, element_name, "object", error); + if (object_info) + free_object_info (object_info); return; } @@ -372,8 +376,7 @@ parse_property (ParserData *data, } static void -free_property_info (PropertyInfo *info, - gpointer user_data) +free_property_info (PropertyInfo *info) { g_free (info->data); g_free (info->name); @@ -728,6 +731,9 @@ end_element (GMarkupParseContext *context, if (!prop_info->data) { error_missing_property_value (data, error); + free_property_info (prop_info); + if (strcmp (info->tag.name, "object") == 0) + free_object_info((ObjectInfo*)info); return; }