Fix cleanup in g_markup_collect

Patch by Matt Barnes,
https://bugzilla.gnome.org/show_bug.cgi?id=644428
This commit is contained in:
Matthias Clasen 2011-03-10 23:27:49 -05:00
parent 949b7c3428
commit a6615ba859

View File

@ -2794,33 +2794,30 @@ failure:
ptr = va_arg (ap, gpointer);
if (ptr == NULL)
continue;
switch (type & (G_MARKUP_COLLECT_OPTIONAL - 1))
if (ptr != NULL)
{
case G_MARKUP_COLLECT_STRDUP:
if (written)
g_free (*(char **) ptr);
switch (type & (G_MARKUP_COLLECT_OPTIONAL - 1))
{
case G_MARKUP_COLLECT_STRDUP:
if (written)
g_free (*(char **) ptr);
case G_MARKUP_COLLECT_STRING:
*(char **) ptr = NULL;
break;
case G_MARKUP_COLLECT_STRING:
*(char **) ptr = NULL;
break;
case G_MARKUP_COLLECT_BOOLEAN:
*(gboolean *) ptr = FALSE;
break;
case G_MARKUP_COLLECT_BOOLEAN:
*(gboolean *) ptr = FALSE;
break;
case G_MARKUP_COLLECT_TRISTATE:
*(gboolean *) ptr = -1;
break;
case G_MARKUP_COLLECT_TRISTATE:
*(gboolean *) ptr = -1;
break;
}
}
type = va_arg (ap, GMarkupCollectType);
attr = va_arg (ap, const char *);
if (written)
written--;
}
va_end (ap);