summaryrefslogtreecommitdiff
path: root/gtk/gtkbuilderparser.c
diff options
context:
space:
mode:
authorJohan Dahlin <johan@src.gnome.org>2007-06-27 04:03:35 +0000
committerJohan Dahlin <johan@src.gnome.org>2007-06-27 04:03:35 +0000
commit4c1343a22c1e1a3d8d5e210ba3c34bd4c21d4bec (patch)
treeabd521e414052f6f0aa10492f73cc937cf183058 /gtk/gtkbuilderparser.c
parent610331684f696959f927fcda459e47207a068760 (diff)
downloadgdk-pixbuf-4c1343a22c1e1a3d8d5e210ba3c34bd4c21d4bec.tar.gz
Plug leaks in error code paths
* gtk/gtkbuilderparser.c: Plug leaks in error code paths svn path=/trunk/; revision=18254
Diffstat (limited to 'gtk/gtkbuilderparser.c')
-rw-r--r--gtk/gtkbuilderparser.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index ea2df67e6..87fd6231a 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;
}