commit 02f6401: [Minor] Css: Fix hash tokens parsing
Vsevolod Stakhov
vsevolod at highsecure.ru
Thu May 6 10:35:04 UTC 2021
Author: Vsevolod Stakhov
Date: 2021-05-06 11:21:15 +0100
URL: https://github.com/rspamd/rspamd/commit/02f640128d28371846fb845aa15434a6cc49a87a
[Minor] Css: Fix hash tokens parsing
---
src/libserver/css/css_parser.cxx | 2 ++
src/libserver/css/css_tokeniser.cxx | 11 ++++++-----
src/libserver/css/css_tokeniser.hxx | 2 +-
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/src/libserver/css/css_parser.cxx b/src/libserver/css/css_parser.cxx
index 49b42021c..d7b1c8ca8 100644
--- a/src/libserver/css/css_parser.cxx
+++ b/src/libserver/css/css_parser.cxx
@@ -833,6 +833,8 @@ TEST_SUITE("css parser") {
"em { color: rgba(100%,0%,0%,1) } /* the same, with explicit opacity of 1 */\n",
"p { color: rgba(0,0,255,0.5) } /* semi-transparent solid blue */\n",
"p { color: rgba(100%, 50%, 0%, 0.1) } /* very transparent solid orange */",
+ ".chat-icon[_ng-cnj-c0]::before{content:url(group-2.63e87cd21fbf8c966dd.svg);width:60px;height:60px;display:block}",
+ "tt{color:#1e3482}",
};
rspamd_mempool_t *pool = rspamd_mempool_new(rspamd_mempool_suggest_size(),
diff --git a/src/libserver/css/css_tokeniser.cxx b/src/libserver/css/css_tokeniser.cxx
index 5b0a0c086..0374193bf 100644
--- a/src/libserver/css/css_tokeniser.cxx
+++ b/src/libserver/css/css_tokeniser.cxx
@@ -177,7 +177,7 @@ css_parser_token::adjust_dim(const css_parser_token &dim_token) -> bool
/*
* Consume functions: return a token and advance lexer offset
*/
-auto css_tokeniser::consume_ident() -> struct css_parser_token
+auto css_tokeniser::consume_ident(bool allow_number) -> struct css_parser_token
{
auto i = offset;
auto need_escape = false;
@@ -211,7 +211,7 @@ auto css_tokeniser::consume_ident() -> struct css_parser_token
while (i < input.size()) {
auto c = input[i];
- auto is_plain_c = allow_middle_minus ? is_plain_ident(c) :
+ auto is_plain_c = (allow_number || allow_middle_minus) ? is_plain_ident(c) :
is_plain_ident_start(c);
if (!is_plain_c) {
if (c == '\\' && i + 1 < input.size ()) {
@@ -533,8 +533,8 @@ auto css_tokeniser::next_token(void) -> struct css_parser_token
case '\r':
case '\v': {
/* Consume as much space as we can */
- while (i < input.size() && g_ascii_isspace(c)) {
- c = input[i++];
+ while (i < input.size() && g_ascii_isspace(input[i])) {
+ i++;
}
auto ret = make_token<css_parser_token::token_type::whitespace_token>(
@@ -675,7 +675,8 @@ auto css_tokeniser::next_token(void) -> struct css_parser_token
if ((is_plain_ident(next_c) || next_c == '-') &&
(is_plain_ident(next_next_c) || next_next_c == '-')) {
offset = i + 1;
- auto ident_token = consume_ident();
+ /* We consume indent, but we allow numbers there */
+ auto ident_token = consume_ident(true);
if (ident_token.type == css_parser_token::token_type::ident_token) {
/* Update type */
diff --git a/src/libserver/css/css_tokeniser.hxx b/src/libserver/css/css_tokeniser.hxx
index 4a484ecd6..a45e56f3f 100644
--- a/src/libserver/css/css_tokeniser.hxx
+++ b/src/libserver/css/css_tokeniser.hxx
@@ -194,7 +194,7 @@ private:
mutable std::list<css_parser_token> backlog;
auto consume_number() -> struct css_parser_token;
- auto consume_ident() -> struct css_parser_token;
+ auto consume_ident(bool allow_number = false) -> struct css_parser_token;
};
}
More information about the Commits
mailing list