mirror of
https://github.com/SerenityOS/serenity
synced 2024-07-23 19:15:55 +00:00
LibRegex: Allow the pattern to match the zero-length end of the string
...only if Multiline is not enabled. Fixes #11940.
This commit is contained in:
parent
c11be92e23
commit
9eccd4c56e
|
@ -683,6 +683,7 @@ TEST_CASE(ECMA262_match)
|
|||
{ "[\\01]"sv, "\1"sv, true, ECMAScriptFlags::BrowserExtended },
|
||||
{ "(\0|a)"sv, "a"sv, true }, // #9686, Should allow null bytes in pattern
|
||||
{ "(.*?)a(?!(a+)b\\2c)\\2(.*)"sv, "baaabaac"sv, true }, // #6042, Groups inside lookarounds may be referenced outside, but their contents appear empty if the pattern in the lookaround fails.
|
||||
{ "a|$"sv, "x"sv, true, (ECMAScriptFlags)regex::AllFlags::Global }, // #11940, Global (not the 'g' flag) regexps should attempt to match the zero-length end of the string too.
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -224,7 +224,10 @@ RegexResult Matcher<Parser>::match(Vector<RegexStringView> const& views, Optiona
|
|||
}
|
||||
}
|
||||
|
||||
for (; view_index < view_length; ++view_index) {
|
||||
for (; view_index <= view_length; ++view_index) {
|
||||
if (view_index == view_length && input.regex_options.has_flag_set(AllFlags::Multiline))
|
||||
break;
|
||||
|
||||
auto& match_length_minimum = m_pattern->parser_result.match_length_minimum;
|
||||
// FIXME: More performant would be to know the remaining minimum string
|
||||
// length needed to match from the current position onwards within
|
||||
|
|
Loading…
Reference in a new issue