From 714a96619f1c0d617f90ae042ee8c89a54ed384d Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Tue, 22 Jun 2021 14:08:40 +0100 Subject: [PATCH] LibJS: Disallow whitespace or comments between regex literal and flags If we consumed whitespace and/or comments after a RegexLiteral token, the following token must not be RegexFlags - no whitespace or comments are allowed between the closing / and the flag characters. Fixes #8201. --- Userland/Libraries/LibJS/Lexer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Lexer.cpp b/Userland/Libraries/LibJS/Lexer.cpp index 1245817d5be..910d7864830 100644 --- a/Userland/Libraries/LibJS/Lexer.cpp +++ b/Userland/Libraries/LibJS/Lexer.cpp @@ -390,12 +390,13 @@ Token Lexer::next() size_t value_start_line_number = m_line_number; size_t value_start_column_number = m_line_column; auto token_type = TokenType::Invalid; + auto did_consume_whitespace_or_comments = trivia_start != value_start; // This is being used to communicate info about invalid tokens to the parser, which then // can turn that into more specific error messages - instead of us having to make up a // bunch of Invalid* tokens (bad numeric literals, unterminated comments etc.) String token_message; - if (m_current_token.type() == TokenType::RegexLiteral && !is_eof() && is_ascii_alpha(m_current_char)) { + if (m_current_token.type() == TokenType::RegexLiteral && !is_eof() && is_ascii_alpha(m_current_char) && !did_consume_whitespace_or_comments) { token_type = TokenType::RegexFlags; while (!is_eof() && is_ascii_alpha(m_current_char)) consume();