diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-07-19 10:48:36 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-07-19 10:48:36 +0100 |
commit | 541322b5cfdd64e9fb2f74c8e5273ad90193cab4 (patch) | |
tree | 62ff23b7271a9503f41b4079511d05d6e35dd7bb /src/libserver/html | |
parent | e215f89e7cbbbeaeb5d0ed7bbd0631ea3a6a6d70 (diff) | |
download | rspamd-541322b5cfdd64e9fb2f74c8e5273ad90193cab4.tar.gz rspamd-541322b5cfdd64e9fb2f74c8e5273ad90193cab4.zip |
[Minor] Fix css style reading
Diffstat (limited to 'src/libserver/html')
-rw-r--r-- | src/libserver/html/html.cxx | 42 |
1 files 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<int>(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<int>(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++; |