LibRegex: Account for uppercase characters in insensitive patterns

This commit is contained in:
Ali Mohammad Pur 2025-07-11 15:06:40 +02:00 committed by Jelle Raaijmakers
commit 5b45223d5f
Notes: github-actions[bot] 2025-07-12 09:27:33 +00:00
6 changed files with 73 additions and 31 deletions

View file

@ -288,8 +288,14 @@ RegexResult Matcher<Parser>::match(Vector<RegexStringView> const& views, Optiona
if (match_length_minimum && match_length_minimum > view_length - view_index)
break;
auto const insensitive = input.regex_options.has_flag_set(AllFlags::Insensitive);
if (auto& starting_ranges = m_pattern->parser_result.optimization_data.starting_ranges; !starting_ranges.is_empty()) {
if (!binary_search(starting_ranges, input.view.code_unit_at(view_index), nullptr, compare_range))
auto ranges = insensitive ? m_pattern->parser_result.optimization_data.starting_ranges_insensitive.span() : starting_ranges.span();
auto ch = input.view.code_unit_at(view_index);
if (insensitive)
ch = to_ascii_lowercase(ch);
if (!binary_search(ranges, ch, nullptr, compare_range))
goto done_matching;
}