From bb40d4d5fff1ca729c14171561d03621d765854e Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Fri, 23 Apr 2021 03:54:26 +0430 Subject: [PATCH] LibRegex: Do not attempt to find more matches when one match is needed --- Userland/Libraries/LibRegex/RegexMatcher.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Userland/Libraries/LibRegex/RegexMatcher.cpp b/Userland/Libraries/LibRegex/RegexMatcher.cpp index 4a1675e5164f78..c5e481b4d9cd3f 100644 --- a/Userland/Libraries/LibRegex/RegexMatcher.cpp +++ b/Userland/Libraries/LibRegex/RegexMatcher.cpp @@ -133,6 +133,7 @@ RegexResult Matcher::match(const Vector views, Optional auto view_length = view.length(); size_t view_index = m_pattern.start_offset; state.string_position = view_index; + bool succeeded = false; if (view_index == view_length && m_pattern.parser_result.match_length_minimum == 0) { // Run the code until it tries to consume something. @@ -182,6 +183,7 @@ RegexResult Matcher::match(const Vector views, Optional return { false, 0, {}, {}, {}, output.operations }; if (success.value()) { + succeeded = true; if (input.regex_options.has_flag_set(AllFlags::MatchNotEndOfLine) && state.string_position == input.view.length()) { if (!continue_search) @@ -229,6 +231,9 @@ RegexResult Matcher::match(const Vector views, Optional if (input.regex_options.has_flag_set(AllFlags::Internal_Stateful)) m_pattern.start_offset = state.string_position; + + if (succeeded && !continue_search) + break; } MatchOutput output_copy;