From d7032b8fc3973169847553ce868243e096ed3332 Mon Sep 17 00:00:00 2001 From: Suleyman POYRAZ Date: Tue, 17 Sep 2024 22:34:45 +0300 Subject: [PATCH] Fixes for valgrind test --- src/dom.c | 21 +++++++++------------ test/tst-dom.c | 5 +++++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/dom.c b/src/dom.c index 31cc4cf..1aab15b 100644 --- a/src/dom.c +++ b/src/dom.c @@ -16,21 +16,21 @@ struct dom_data { static int tagHook (struct dom_data *data, char *name, char **atts, int type) { - iks *x; - ikstack *s = NULL; // Initialize s to NULL + iks* x; if (IKS_OPEN == type || IKS_SINGLE == type) { if (data->current) { x = iks_insert(data->current, name); - } else { - s = iks_stack_new(data->chunk_size, data->chunk_size); // Allocate stack + } + else { + ikstack* s; + s = iks_stack_new(data->chunk_size, data->chunk_size); x = iks_new_within(name, s); if (!x) { - iks_free(s); // Free stack if memory allocation for x fails + iks_stack_delete (s); return IKS_NOMEM; } } - if (atts) { int i = 0; while (atts[i]) { @@ -41,16 +41,12 @@ tagHook (struct dom_data *data, char *name, char **atts, int type) data->current = x; } if (IKS_CLOSE == type || IKS_SINGLE == type) { - x = iks_parent (data->current); - - if (iks_strcmp(iks_name(data->current), name) != 0) { - if (s) iks_free(s); // Free the stack if comparison fails + x = iks_parent(data->current); + if (iks_strcmp(iks_name(data->current), name) != 0) return IKS_BADXML; - } if (x) data->current = x; else { - if (s) iks_free(s); // Free the stack when finished *(data->iksptr) = data->current; data->current = NULL; } @@ -150,6 +146,7 @@ iks_load (const char *fname, iks **xptr) int e; e = iks_parse (prs, buf, len, done); if (IKS_OK != e) { + iks_parser_delete (prs); ret = e; break; } diff --git a/test/tst-dom.c b/test/tst-dom.c index 1f28b07..a143018 100644 --- a/test/tst-dom.c +++ b/test/tst-dom.c @@ -46,6 +46,10 @@ document (char *xml) iks_parser_delete (p); } +void finalize() { + if (my_x) iks_delete(my_x); +} + void tag (char *name, ...) { @@ -162,5 +166,6 @@ int main (int argc, char *argv[]) tag ("test", 0); string (buf); + finalize(); return 0; }