X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/4729b6937b582a029147ba51298f5c300c5b1891..6d2c02560e5c0aa7cef83d02b26f193135b93e21:/src/src/header.c diff --git a/src/src/header.c b/src/src/header.c index 720446bff..898d8d5c4 100644 --- a/src/src/header.c +++ b/src/src/header.c @@ -2,8 +2,8 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2020 - 2022 */ /* Copyright (c) University of Cambridge 1995 - 2016 */ -/* Copyright (c) The Exim Maintainers 2020 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -102,7 +102,7 @@ gstring gs; if (!header_last) return NULL; -gs.s = buf = store_get(HEADER_ADD_BUFFER_SIZE, FALSE); +gs.s = buf = store_get(HEADER_ADD_BUFFER_SIZE, GET_UNTAINTED); gs.size = HEADER_ADD_BUFFER_SIZE; gs.ptr = 0; @@ -182,7 +182,7 @@ for (p = q = gs.s; *p; p = q) if (*(++q) != ' ' && *q != '\t') break; } - new = store_get(sizeof(header_line), FALSE); + new = store_get(sizeof(header_line), GET_UNTAINTED); new->text = string_copyn(p, q - p); new->slen = q - p; new->type = type; @@ -371,7 +371,7 @@ static BOOL one_pattern_match(uschar *name, int slen, BOOL has_addresses, uschar *pattern) { BOOL yield = FALSE; -const pcre *re = NULL; +const pcre2_code *re = NULL; /* If the pattern is a regex, compile it. Bomb out if compiling fails; these patterns are all constructed internally and should be valid. */ @@ -419,10 +419,9 @@ for (header_line * h = header_list; !yield && h; h = h->next) /* Otherwise, test for the pattern; a non-regex must be an exact match */ - yield = !re - ? (strcmpic(next, pattern) == 0) - : (pcre_exec(re, NULL, CS next, Ustrlen(next), 0, PCRE_EOPT, NULL, 0) - >= 0); + yield = re + ? regex_match(re, next, -1, NULL) + : (strcmpic(next, pattern) == 0); } } @@ -431,10 +430,9 @@ for (header_line * h = header_list; !yield && h; h = h->next) else { - yield = (re == NULL)? - (strstric(h->text, pattern, FALSE) != NULL) - : - (pcre_exec(re, NULL, CS h->text, h->slen, 0, PCRE_EOPT, NULL, 0) >= 0); + yield = re + ? regex_match(re, h->text, h->slen, NULL) + : (strstric(h->text, pattern, FALSE) != NULL); } }