From b9ffa0ad2e889ba6c8dff68f31971f66cbfef117 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Sat, 9 Oct 2021 17:18:21 +0330 Subject: [PATCH] LibRegex: Transform 0,1 min/unbounded max repetitions to * or + The implementation of transform_bytecode_repetition_min_max expects at least min=1, so let's also optimise on our way out of a bug where 'x{0,}' would cause a crash. --- Userland/Libraries/LibRegex/RegexByteCode.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Userland/Libraries/LibRegex/RegexByteCode.h b/Userland/Libraries/LibRegex/RegexByteCode.h index 950f668645..449c2e7bc4 100644 --- a/Userland/Libraries/LibRegex/RegexByteCode.h +++ b/Userland/Libraries/LibRegex/RegexByteCode.h @@ -341,6 +341,13 @@ public: template static void transform_bytecode_repetition_min_max(ByteCode& bytecode_to_repeat, T minimum, Optional maximum, size_t min_repetition_mark_id, size_t max_repetition_mark_id, bool greedy = true) requires(IsIntegral) { + if (!maximum.has_value()) { + if (minimum == 0) + return transform_bytecode_repetition_any(bytecode_to_repeat, greedy); + if (minimum == 1) + return transform_bytecode_repetition_min_one(bytecode_to_repeat, greedy); + } + ByteCode new_bytecode; new_bytecode.insert_bytecode_repetition_n(bytecode_to_repeat, minimum, min_repetition_mark_id);