From 77c5d9f20a3e51b64a065e14449333b7a1e9f00d Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sun, 29 Jul 2018 10:02:56 +0100 Subject: Correct COLLECT logic in walk_logic_adjacent_text_in_order to stop leak --- src/core/text.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/core/text.c b/src/core/text.c index 3b726fd..b73e86d 100644 --- a/src/core/text.c +++ b/src/core/text.c @@ -381,21 +381,32 @@ dom_exception walk_logic_adjacent_text_in_order( assert(node->last_child == NULL); if (opt == COLLECT) { err = dom_characterdata_get_data(node, &data); - if (err == DOM_NO_ERR) + if (err != DOM_NO_ERR) return err; tmp = *ret; if (order == LEFT) { - err = dom_string_concat(data, tmp, ret); - if (err == DOM_NO_ERR) - return err; + if (tmp != NULL) { + err = dom_string_concat(data, tmp, ret); + if (err != DOM_NO_ERR) + return err; + } else { + dom_string_ref(data); + *ret = data; + } } else if (order == RIGHT) { - err = dom_string_concat(tmp, data, ret); - if (err == DOM_NO_ERR) - return err; + if (tmp != NULL) { + err = dom_string_concat(tmp, data, ret); + if (err != DOM_NO_ERR) + return err; + } else { + dom_string_ref(data); + *ret = data; + } } - dom_string_unref(tmp); + if (tmp != NULL) + dom_string_unref(tmp); dom_string_unref(data); *cont = true; -- cgit v1.2.3