From 97dde091702fac122ff2f5178e3773f170758f1b Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Fri, 21 Jan 2022 20:08:47 +0330 Subject: LibRegex: Allow ClearCaptureGroup to create new groups Instead of leaking all capture groups and selectively clearing some, simply avoid leaking things and only "define" the ones that need to exist. This *actually* implements the capture groups ECMA262 quirk. Also adds the test removed in the previous commit (to avoid messing up test runs across bisects). --- Userland/Libraries/LibRegex/RegexByteCode.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'Userland/Libraries/LibRegex') diff --git a/Userland/Libraries/LibRegex/RegexByteCode.cpp b/Userland/Libraries/LibRegex/RegexByteCode.cpp index 6177a1f3e2..050f067ae0 100644 --- a/Userland/Libraries/LibRegex/RegexByteCode.cpp +++ b/Userland/Libraries/LibRegex/RegexByteCode.cpp @@ -329,8 +329,11 @@ ALWAYS_INLINE ExecutionResult OpCode_ClearCaptureGroup::execute(MatchInput const { if (input.match_index < state.capture_group_matches.size()) { auto& group = state.capture_group_matches[input.match_index]; - if (id() < group.size()) - group[id()].reset(); + auto group_id = id(); + if (group_id >= group.size()) + group.resize(group_id + 1); + + group[group_id].reset(); } return ExecutionResult::Continue; } -- cgit v1.2.3