File 0003-lib-regex-Limit-number-of-capture-groups-correctly.patch of Package dovecot24
From 7619375c605708414664e351bbab0f084e687e8f Mon Sep 17 00:00:00 2001
From: Aki Tuomi <aki.tuomi@open-xchange.com>
Date: Mon, 22 Dec 2025 22:01:18 +0200
Subject: [PATCH 3/3] lib-regex: Limit number of capture groups correctly
We create at maximum max_capture_groups match groups.
---
src/lib-regex/regex.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/lib-regex/regex.c b/src/lib-regex/regex.c
index 5ccf9d54be..d48b48adf3 100644
--- a/src/lib-regex/regex.c
+++ b/src/lib-regex/regex.c
@@ -336,12 +336,9 @@ int dregex_code_match_groups(struct dregex_code *code, const char *subject,
T_BEGIN {
pcre2_match_data *mdata =
- pcre2_match_data_create_from_pattern(code->pat, code->gctx);
+ pcre2_match_data_create(code->max_capture_groups, code->gctx);
ret = dregex_code_match_int(code, subject, mdata, error_r);
- /* Avoid extracting way too many capture groups */
- if (ret > (int)code->max_capture_groups + 1)
- ret = handle_error(PCRE2_ERROR_TOO_MANY_CAPTURES, error_r);
- else if (ret > 1) {
+ if (ret > 1) {
bool skip_empty = HAS_ALL_BITS(code->flags, DREGEX_NO_EMPTY_SUB);
/* ret is number of groups */
extract_matches((uint32_t)ret, mdata, skip_empty, groups_r);
--
2.52.0