From: Vsevolod Stakhov Date: Thu, 28 Jan 2021 15:47:23 +0000 (+0000) Subject: [Project] Css: Finish generic lexer cases X-Git-Tag: 3.0~724 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=acf1756dfae5a93e0348eae74809d343e696f44b;p=thirdparty%2Frspamd.git [Project] Css: Finish generic lexer cases --- diff --git a/src/libserver/css/css_tokeniser.cxx b/src/libserver/css/css_tokeniser.cxx index 534ae34265..3d1749913d 100644 --- a/src/libserver/css/css_tokeniser.cxx +++ b/src/libserver/css/css_tokeniser.cxx @@ -381,6 +381,8 @@ auto css_tokeniser::consume_number() -> struct css_parser_token if (input[i] == '%') { ret.flags |= css_parser_token::number_percent; i ++; + + offset = i; } else if (is_plain_ident(input[i])) { auto dim_token = consume_ident(); @@ -392,8 +394,16 @@ auto css_tokeniser::consume_number() -> struct css_parser_token (int)sv.size(), sv.begin(), num); } } + else { + /* We have no option but to uncosume ident token in this case */ + msg_debug_css("got invalid ident like token after number, unconsume it"); + offset = i; + } } } + else { + offset = i; + } return ret; } @@ -677,6 +687,17 @@ auto css_tokeniser::next_token(void) -> struct css_parser_token break; default: /* Generic parsing code */ + + if (g_ascii_isdigit(c)) { + return consume_number(); + } + else if (is_plain_ident(c)) { + return consume_ident(); + } + else { + offset = i + 1; + return make_token(c); + } break; }