From 541322b5cfdd64e9fb2f74c8e5273ad90193cab4 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 19 Jul 2021 10:48:36 +0100 Subject: [PATCH] [Minor] Fix css style reading --- src/libserver/html/html.cxx | 42 ++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/libserver/html/html.cxx b/src/libserver/html/html.cxx index beec91fac..e3a70d809 100644 --- a/src/libserver/html/html.cxx +++ b/src/libserver/html/html.cxx @@ -1759,10 +1759,33 @@ html_process_input(rspamd_mempool_t *pool, html_document_state = html_document_state::body; } } + /* cur_tag here is a closing tag */ auto *next_cur_tag = html_check_balance(hc, cur_tag, c - start, p - start + 1); + if (cur_tag->id == Tag_STYLE && allow_css) { + auto *opening_tag = cur_tag->parent; + + if (opening_tag && opening_tag->content_offset < opening_tag->closing.start) { + auto ret_maybe = rspamd::css::parse_css(pool, + {start + cur_tag->content_offset, + cur_tag->closing.start - cur_tag->content_offset}, + std::move(hc->css_style)); + + if (!ret_maybe.has_value()) { + auto err_str = fmt::format("cannot parse css (error code: {}): {}", + static_cast(ret_maybe.error().type), + ret_maybe.error().description.value_or("unknown error")); + msg_info_pool ("cannot parse css: %*s", + (int) err_str.size(), err_str.data()); + } + else { + hc->css_style = ret_maybe.value(); + } + } + } + if (next_cur_tag != nullptr) { cur_tag = next_cur_tag; } @@ -1798,25 +1821,6 @@ html_process_input(rspamd_mempool_t *pool, parent_tag = cur_tag->parent; g_assert(cur_tag->parent != &cur_closing_tag); } - - if (cur_tag->id == Tag_STYLE && cur_tag->closing.start > cur_tag->content_offset) { - if (allow_css) { - auto ret_maybe = rspamd::css::parse_css(pool, - {start + cur_tag->content_offset, cur_tag->closing.start - cur_tag->content_offset}, - std::move(hc->css_style)); - - if (!ret_maybe.has_value()) { - auto err_str = fmt::format("cannot parse css (error code: {}): {}", - static_cast(ret_maybe.error().type), - ret_maybe.error().description.value_or("unknown error")); - msg_info_pool ("cannot parse css: %*s", - (int) err_str.size(), err_str.data()); - } - else { - hc->css_style = ret_maybe.value(); - } - } - } } /* if cur_tag != nullptr */ state = html_text_content; p++; -- 2.39.5