[markup] Fix memory leak

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2008-04-30 15:46:19 +02:00
parent 3f23635a33
commit 5638661157
1 changed files with 11 additions and 5 deletions

View File

@ -64,12 +64,14 @@ markup_parse_start_element(GMarkupParseContext *context __attribute__ ((unused))
p->attribute_names[i][j] = a_strdup(attribute_names[j]); p->attribute_names[i][j] = a_strdup(attribute_names[j]);
p->attribute_values[i][j] = a_strdup(attribute_values[j]); p->attribute_values[i][j] = a_strdup(attribute_values[j]);
} }
if(p->elements_sub && p->elements_sub[i]) if(p->elements_sub && p->elements_sub[i])
{ {
asprintf(&newtext, "%s%s", NONULL(p->text), p->elements_sub[i]); asprintf(&newtext, "%s%s", NONULL(p->text), p->elements_sub[i]);
p_delete(&p->text); p_delete(&p->text);
p->text = newtext; p->text = newtext;
} }
return; return;
} }
@ -189,15 +191,18 @@ markup_parser_data_delete(markup_parser_data_t **p)
for(i = 0; (*p)->elements[i]; i++) for(i = 0; (*p)->elements[i]; i++)
if((*p)->attribute_names[i]) if((*p)->attribute_names[i])
{ {
for(j = 0; (*p)->attribute_names[i][j]; j++); for(j = 0; (*p)->attribute_names[i][j]; j++)
{ {
p_delete(&(*p)->attribute_names[i][j]); p_delete(&((*p)->attribute_names[i][j]));
p_delete(&(*p)->attribute_values[i][j]); p_delete(&((*p)->attribute_values[i][j]));
} }
p_delete(&(*p)->attribute_names[i]); p_delete(&((*p)->attribute_names[i]));
p_delete(&(*p)->attribute_values[i]); p_delete(&((*p)->attribute_values[i]));
} }
p_delete(&(*p)->attribute_names);
p_delete(&(*p)->attribute_values);
p_delete(&(*p)->text); p_delete(&(*p)->text);
p_delete(p); p_delete(p);
} }
@ -236,6 +241,7 @@ markup_parse(markup_parser_data_t *data, const char *str, ssize_t slen)
{ {
warn("unable to parse text \"%s\": %s\n", str, error->message); warn("unable to parse text \"%s\": %s\n", str, error->message);
g_error_free(error); g_error_free(error);
g_markup_parse_context_free(mkp_ctx);
return false; return false;
} }