diff options
author | Ali Mohammad Pur <ali.mpfard@gmail.com> | 2022-07-05 04:56:21 +0430 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-07-05 07:19:13 +0200 |
commit | 7d01ee63d65831a4d32a4184517f7cc6e68ee83c (patch) | |
tree | 99acc652421eccecae5325cea7cc01be8a3cb893 | |
parent | c774790975f136bcff70dd4e9fa444f100f34003 (diff) | |
download | serenity-7d01ee63d65831a4d32a4184517f7cc6e68ee83c.zip |
LibRegex: Use proper CharRange constructor instead of bit_casting
Otherwise the range order would be inverted.
-rw-r--r-- | Tests/LibRegex/Regex.cpp | 1 | ||||
-rw-r--r-- | Userland/Libraries/LibRegex/RegexOptimizer.cpp | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/Tests/LibRegex/Regex.cpp b/Tests/LibRegex/Regex.cpp index 49e05203e9..eac8709085 100644 --- a/Tests/LibRegex/Regex.cpp +++ b/Tests/LibRegex/Regex.cpp @@ -922,6 +922,7 @@ TEST_CASE(optimizer_atomic_groups) Tuple { "a+b"sv, "aaaaa"sv, false }, Tuple { "\\\\(\\d+)"sv, "\\\\"sv, false }, // Rewrite bug turning a+ to a*, see #10952. Tuple { "[a-z.]+\\."sv, "..."sv, true }, // Rewrite bug, incorrect interpretation of Compare. + Tuple { "[.-]+\\."sv, ".-."sv, true }, // Alternative fuse Tuple { "(abcfoo|abcbar|abcbaz).*x"sv, "abcbarx"sv, true }, Tuple { "(a|a)"sv, "a"sv, true }, diff --git a/Userland/Libraries/LibRegex/RegexOptimizer.cpp b/Userland/Libraries/LibRegex/RegexOptimizer.cpp index cc595798b1..78f7017f58 100644 --- a/Userland/Libraries/LibRegex/RegexOptimizer.cpp +++ b/Userland/Libraries/LibRegex/RegexOptimizer.cpp @@ -187,7 +187,7 @@ static bool has_overlap(Vector<CompareTypeAndValuePair> const& lhs, Vector<Compa lhs_negated_char_classes.set(static_cast<CharClass>(pair.value)); break; case CharacterCompareType::CharRange: { - auto range = bit_cast<CharRange>(pair.value); + auto range = CharRange(pair.value); if (!current_lhs_inversion_state()) lhs_ranges.insert(range.from, range.to); else @@ -257,7 +257,7 @@ static bool has_overlap(Vector<CompareTypeAndValuePair> const& lhs, Vector<Compa return true; break; case CharacterCompareType::CharRange: { - auto range = bit_cast<CharRange>(pair.value); + auto range = CharRange(pair.value); if (!current_lhs_inversion_state() && range_contains(range)) return true; break; |