From e0ac85288eddb690c555c2ffb2a1e0f2f4b6b565 Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Fri, 26 Feb 2021 23:23:58 +0330 Subject: [PATCH] LibRegex: Allow missing high bound in {x,y} quantifiers Fixes #5518. --- Userland/Libraries/LibRegex/RegexParser.cpp | 10 ++++------ Userland/Libraries/LibRegex/Tests/Regex.cpp | 1 + 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibRegex/RegexParser.cpp b/Userland/Libraries/LibRegex/RegexParser.cpp index b56797fd3c..3bf96475d2 100644 --- a/Userland/Libraries/LibRegex/RegexParser.cpp +++ b/Userland/Libraries/LibRegex/RegexParser.cpp @@ -954,12 +954,10 @@ bool ECMA262Parser::parse_quantifier(ByteCode& stack, size_t& match_length_minim if (match(TokenType::Comma)) { consume(); auto high_bound = read_digits(); - if (!high_bound.has_value()) { - set_error(Error::InvalidBraceContent); - return false; - } - - repeat_max = high_bound.value(); + if (high_bound.has_value()) + repeat_max = high_bound.value(); + } else { + repeat_max = repeat_min; } if (!match(TokenType::RightCurly)) { diff --git a/Userland/Libraries/LibRegex/Tests/Regex.cpp b/Userland/Libraries/LibRegex/Tests/Regex.cpp index 9e123fce56..378fef5b13 100644 --- a/Userland/Libraries/LibRegex/Tests/Regex.cpp +++ b/Userland/Libraries/LibRegex/Tests/Regex.cpp @@ -563,6 +563,7 @@ TEST_CASE(ECMA262_match) { "^(?:^^\\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|,|-=|->|\\/|\\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\\^=|\\^\\^|\\^\\^=|{|\\||\\|=|\\|\\||\\|\\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*(\\/(?=[^*/])(?:[^/[\\\\]|\\\\[\\S\\s]|\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*(?:]|$))+\\/)", "return /xx/", true, ECMAScriptFlags::BrowserExtended }, // #5517, appears to be matching JS expressions that involve regular expressions... + { "a{2,}", "aaaa" }, // #5518 }; // clang-format on