aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/html
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2021-07-27 20:15:21 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2021-07-27 20:15:21 +0100
commit9da164227d682ec31325b69a3fdd0278f00f9c8b (patch)
treef06983ffc23e8a539e79809de50bfe907f0094b9 /src/libserver/html
parent0eb055f6163508bcd0c80546bce1e92e9d4e3817 (diff)
downloadrspamd-9da164227d682ec31325b69a3fdd0278f00f9c8b.tar.gz
rspamd-9da164227d682ec31325b69a3fdd0278f00f9c8b.zip
[Fix] Fix overflow when appending many broken tags
Diffstat (limited to 'src/libserver/html')
-rw-r--r--src/libserver/html/html.cxx12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libserver/html/html.cxx b/src/libserver/html/html.cxx
index 9c96f2bb9..716d944ea 100644
--- a/src/libserver/html/html.cxx
+++ b/src/libserver/html/html.cxx
@@ -1082,8 +1082,8 @@ html_append_tag_content(rspamd_mempool_t *pool,
tag->closing.end = tag->closing.start;
}
else {
- next_tag_offset = len;
- tag->closing.end = len;
+ next_tag_offset = tag->content_offset;
+ tag->closing.end = tag->content_offset;
}
}
if (tag->closing.start == -1) {
@@ -1881,6 +1881,14 @@ html_process_input(rspamd_mempool_t *pool,
}
}
+ if (cur_tag && !(cur_tag->flags & FL_CLOSED) && cur_tag != &cur_closing_tag) {
+ cur_closing_tag.parent = cur_tag;
+ cur_closing_tag.id = cur_tag->id;
+ cur_tag = &cur_closing_tag;
+ html_check_balance(hc, cur_tag,
+ end - start, end - start);
+ }
+
/* Propagate styles */
hc->traverse_block_tags([&hc, &pool](const html_tag *tag) -> bool {