From ff2080b07b5696df0ebd778d49f854f66b828d24 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 7 Jul 2021 21:46:13 +0100 Subject: [PATCH] [Minor] Fix dom save point logic --- src/libserver/html/html.cxx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/libserver/html/html.cxx b/src/libserver/html/html.cxx index a6fcfe36b..b3080bd88 100644 --- a/src/libserver/html/html.cxx +++ b/src/libserver/html/html.cxx @@ -1285,7 +1285,7 @@ html_process_input(rspamd_mempool_t *pool, ntag->tag_start = c - start; ntag->flags = flags; - if (cur_tag && !(cur_tag->flags & (CM_EMPTY|FL_CLOSED))) { + if (cur_tag && !(cur_tag->flags & (CM_EMPTY|FL_CLOSED)) && cur_tag != &cur_closing_tag) { parent_tag = cur_tag; } @@ -1308,13 +1308,16 @@ html_process_input(rspamd_mempool_t *pool, } /* Shift to the first unclosed tag */ - while (parent_tag && (parent_tag->flags & FL_CLOSED)) { - parent_tag = parent_tag->parent; + auto *pt = parent_tag; + while (pt && (pt->flags & FL_CLOSED)) { + pt = pt->parent; } - if (parent_tag) { - cur_tag->parent = parent_tag; + if (pt) { + cur_tag->parent = pt; g_assert(cur_tag->parent != cur_tag); + g_assert(cur_tag->parent != &cur_closing_tag); + parent_tag = pt; parent_tag->children.push_back(cur_tag); } else { @@ -1810,10 +1813,12 @@ html_process_input(rspamd_mempool_t *pool, vtag->content_offset = p - start + 1; vtag->closing = cur_tag->closing; vtag->parent = cur_opening_tag; + g_assert(vtag->parent != &cur_closing_tag); cur_opening_tag->children.push_back(vtag.get()); hc->all_tags.emplace_back(std::move(vtag)); cur_tag = cur_opening_tag; parent_tag = cur_tag->parent; + g_assert(cur_tag->parent != &cur_closing_tag); } } /* if cur_tag != nullptr */ state = html_text_content; -- 2.39.5