From: Vsevolod Stakhov Date: Thu, 4 Feb 2021 20:30:44 +0000 (+0000) Subject: [Project] Css: Implement backlog of css tokens X-Git-Tag: 3.0~708 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9d94e62947e88a71c229677d8cb1450a4a601d23;p=thirdparty%2Frspamd.git [Project] Css: Implement backlog of css tokens --- diff --git a/src/libserver/css/css_tokeniser.cxx b/src/libserver/css/css_tokeniser.cxx index b8f4f5ebcf..03e70c32f7 100644 --- a/src/libserver/css/css_tokeniser.cxx +++ b/src/libserver/css/css_tokeniser.cxx @@ -209,7 +209,6 @@ css_parser_token::adjust_dim(const css_parser_token &dim_token) -> bool } else { flags |= css_parser_token::flag_bad_dimension; - msg_err("hui: %*s", (int)sv.size(), sv.begin()); return false; } @@ -445,6 +444,13 @@ auto css_tokeniser::consume_number() -> struct css_parser_token */ auto css_tokeniser::next_token(void) -> struct css_parser_token { + /* Check pushback queue */ + if (!backlog.empty()) { + auto &tok = backlog.front(); + backlog.pop_front(); + + return std::move(tok); + } /* Helpers */ /* diff --git a/src/libserver/css/css_tokeniser.hxx b/src/libserver/css/css_tokeniser.hxx index 7ef5f46438..afe888a80f 100644 --- a/src/libserver/css/css_tokeniser.hxx +++ b/src/libserver/css/css_tokeniser.hxx @@ -22,6 +22,7 @@ #include #include #include +#include #include "mem_pool.h" namespace rspamd::css { @@ -91,6 +92,7 @@ struct css_parser_token { explicit css_parser_token(token_type type, const value_type &value) : value(value), type(type) {} css_parser_token(css_parser_token &&other) = default; + auto operator=(css_parser_token &&other) -> css_parser_token& = default; auto adjust_dim(const css_parser_token &dim_token) -> bool; /* Debugging routines */ @@ -110,10 +112,14 @@ public: auto next_token(void) -> struct css_parser_token; auto get_offset(void) const { return offset; } + auto pushback_token(struct css_parser_token &&t) const -> void { + backlog.push_back(std::forward(t)); + } private: std::string_view input; std::size_t offset; rspamd_mempool_t *pool; + mutable std::list backlog; auto consume_number() -> struct css_parser_token; auto consume_ident() -> struct css_parser_token;