Jelajahi Sumber

LibRegex: Use proper CharRange constructor instead of bit_casting

Otherwise the range order would be inverted.
Ali Mohammad Pur 3 tahun lalu
induk
melakukan
7d01ee63d6
2 mengubah file dengan 3 tambahan dan 2 penghapusan
  1. 1 0
      Tests/LibRegex/Regex.cpp
  2. 2 2
      Userland/Libraries/LibRegex/RegexOptimizer.cpp

+ 1 - 0
Tests/LibRegex/Regex.cpp

@@ -922,6 +922,7 @@ TEST_CASE(optimizer_atomic_groups)
         Tuple { "a+b"sv, "aaaaa"sv, false },
         Tuple { "a+b"sv, "aaaaa"sv, false },
         Tuple { "\\\\(\\d+)"sv, "\\\\"sv, false }, // Rewrite bug turning a+ to a*, see #10952.
         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 { "[a-z.]+\\."sv, "..."sv, true },   // Rewrite bug, incorrect interpretation of Compare.
+        Tuple { "[.-]+\\."sv, ".-."sv, true },
         // Alternative fuse
         // Alternative fuse
         Tuple { "(abcfoo|abcbar|abcbaz).*x"sv, "abcbarx"sv, true },
         Tuple { "(abcfoo|abcbar|abcbaz).*x"sv, "abcbarx"sv, true },
         Tuple { "(a|a)"sv, "a"sv, true },
         Tuple { "(a|a)"sv, "a"sv, true },

+ 2 - 2
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));
                 lhs_negated_char_classes.set(static_cast<CharClass>(pair.value));
             break;
             break;
         case CharacterCompareType::CharRange: {
         case CharacterCompareType::CharRange: {
-            auto range = bit_cast<CharRange>(pair.value);
+            auto range = CharRange(pair.value);
             if (!current_lhs_inversion_state())
             if (!current_lhs_inversion_state())
                 lhs_ranges.insert(range.from, range.to);
                 lhs_ranges.insert(range.from, range.to);
             else
             else
@@ -257,7 +257,7 @@ static bool has_overlap(Vector<CompareTypeAndValuePair> const& lhs, Vector<Compa
                 return true;
                 return true;
             break;
             break;
         case CharacterCompareType::CharRange: {
         case CharacterCompareType::CharRange: {
-            auto range = bit_cast<CharRange>(pair.value);
+            auto range = CharRange(pair.value);
             if (!current_lhs_inversion_state() && range_contains(range))
             if (!current_lhs_inversion_state() && range_contains(range))
                 return true;
                 return true;
             break;
             break;