X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/d8ecc7bf97934a1e2244788c610c958cacd740bd..a85c067ba6c6940512cf57ec213277a370d87e70:/src/src/regex.c diff --git a/src/src/regex.c b/src/src/regex.c index 3088f0066..eefba8ecf 100644 --- a/src/src/regex.c +++ b/src/src/regex.c @@ -6,6 +6,7 @@ * Copyright (c) The Exim Maintainers 2016 - 2022 * Copyright (c) Tom Kistner 2003-2015 * License: GPL + * SPDX-License-Identifier: GPL-2.0-only */ /* Code for matching regular expressions against headers and body. @@ -79,10 +80,10 @@ for (pcre_list * ri = re_list_head; ri; ri = ri->next) for (int nn = 1; nn < n; nn++) { - PCRE2_UCHAR * cstr; - PCRE2_SIZE cslen; - pcre2_substring_get_bynumber(md, nn, &cstr, &cslen); /* uses same ctx as md */ - regex_vars[nn-1] = CUS cstr; + PCRE2_SIZE * ovec = pcre2_get_ovector_pointer(md); + int off = nn * 2; + int len = ovec[off + 1] - ovec[off]; + regex_vars[nn-1] = string_copyn(linebuffer + ovec[off], len); } return OK; @@ -93,6 +94,16 @@ return FAIL; } +/* reset expansion variables */ +void +regex_vars_clear(void) +{ +regex_match_string = NULL; +for (int i = 0; i < REGEX_VARS; i++) regex_vars[i] = NULL; +} + + + int regex(const uschar ** listptr, BOOL cacheable) {