From: Vsevolod Stakhov Date: Fri, 11 Jun 2021 15:36:31 +0000 (+0100) Subject: [Minor] Use traverse over all tags X-Git-Tag: 3.0~319 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bd1ed8fa07d22dd048fc38a191ed34f77d8618de;p=thirdparty%2Frspamd.git [Minor] Use traverse over all tags --- diff --git a/src/libserver/html/html.cxx b/src/libserver/html/html.cxx index 1cbc1f1051..e727639aa7 100644 --- a/src/libserver/html/html.cxx +++ b/src/libserver/html/html.cxx @@ -1643,7 +1643,7 @@ html_process_input(rspamd_mempool_t *pool, } } - hc->traverse_tags([](const html_tag *tag) -> bool { + hc->traverse_block_tags([](const html_tag *tag) -> bool { /* Summarize content length from children */ for (const auto *cld_tag : tag->children) { tag->content_length += cld_tag->content_length; diff --git a/src/libserver/html/html.hxx b/src/libserver/html/html.hxx index c75d84ea48..3fd778ade5 100644 --- a/src/libserver/html/html.hxx +++ b/src/libserver/html/html.hxx @@ -63,7 +63,7 @@ struct html_content { PRE_ORDER, POST_ORDER }; - auto traverse_tags(fu2::function &&func, + auto traverse_block_tags(fu2::function &&func, traverse_type how = traverse_type::PRE_ORDER) const -> bool { if (root_tag == nullptr) { @@ -103,6 +103,18 @@ struct html_content { } } + auto traverse_all_tags(fu2::function &&func) const -> bool { + for (const auto &tag : all_tags) { + if (!(tag->flags & (FL_CLOSING|FL_XML))) { + if (!func(tag.get())) { + return false; + } + } + } + + return true; + } + private: ~html_content() = default; }; diff --git a/src/lua/lua_html.cxx b/src/lua/lua_html.cxx index 058ef401f6..7e17f835f6 100644 --- a/src/lua/lua_html.cxx +++ b/src/lua/lua_html.cxx @@ -431,7 +431,7 @@ lua_html_foreach_tag (lua_State *L) } if (hc && (any || !tags.empty()) && lua_isfunction (L, 3)) { - hc->traverse_tags([&](const rspamd::html::html_tag *tag) -> bool { + hc->traverse_all_tags([&](const rspamd::html::html_tag *tag) -> bool { if (tag && (any || tags.contains(tag->id))) { lua_pushvalue(L, 3);