diff --git a/Tests/LibRegex/Regex.cpp b/Tests/LibRegex/Regex.cpp index 22e91cb1c44..bdaed954f2f 100644 --- a/Tests/LibRegex/Regex.cpp +++ b/Tests/LibRegex/Regex.cpp @@ -1051,6 +1051,8 @@ TEST_CASE(optimizer_alternation) Tuple { "ab|ac|ad|bc"sv, "bc"sv, 2u }, // Should not crash on backwards jumps introduced by '.*'. Tuple { "\\bDroid\\b.*Build|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052"sv, "XT1068"sv, 6u }, + // Backwards jumps to IP 0 are normal jumps too. + Tuple { "^(\\d+|x)"sv, "42"sv, 2u }, }; for (auto& test : tests) { diff --git a/Userland/Libraries/LibRegex/RegexOptimizer.cpp b/Userland/Libraries/LibRegex/RegexOptimizer.cpp index 956f1e51ab2..2672ddfc112 100644 --- a/Userland/Libraries/LibRegex/RegexOptimizer.cpp +++ b/Userland/Libraries/LibRegex/RegexOptimizer.cpp @@ -1150,7 +1150,7 @@ void Optimizer::append_alternation(ByteCode& target, Span alternatives VERIFY(node->has_metadata()); QualifiedIP ip = node->metadata_value().first(); auto intended_jump_ip = ip.instruction_position + jump_offset + opcode.size(); - if (jump_offset < 0 && intended_jump_ip > 0) { + if (jump_offset < 0) { VERIFY(has_any_backwards_jump); // We should've already seen this instruction, so we can just patch it in. auto& ip_mapping = ip_mapping_for_alternative(ip.alternative_index);