From 18dbd8524cf29efbbf491b0b61c9bd49e15fa130 Mon Sep 17 00:00:00 2001 From: Wietse Venema Date: Sun, 8 Feb 2015 00:00:00 -0500 Subject: [PATCH] postfix-2.8.20 --- postfix/HISTORY | 12 ++++++++++++ postfix/src/cleanup/cleanup_map1n.c | 9 +++++++++ postfix/src/global/mail_version.h | 4 ++-- postfix/src/global/tok822_tree.c | 7 ++++--- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/postfix/HISTORY b/postfix/HISTORY index 1a09e0779..c60b19153 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -17022,3 +17022,15 @@ Apologies for any names omitted. Cleanup: revert the workaround that places headers inserted with PREPEND actions or policy requests BELOW Postfix's own Received: message header. File: smtpd/smtpd.c. + +20150106 + + Robustness: don't segfault due to excessive recursion after + a faulty configuration runs into the virtual_alias_recursion_limit. + File: global/tok822_tree.c. + +20150115 + + Safety: stop aliasing loops that exponentially increase the + address length with each iteration. Back-ported from Postfix + 3.0. File: cleanup/cleanup_map1n.c. diff --git a/postfix/src/cleanup/cleanup_map1n.c b/postfix/src/cleanup/cleanup_map1n.c index b806a6017..fe515ab05 100644 --- a/postfix/src/cleanup/cleanup_map1n.c +++ b/postfix/src/cleanup/cleanup_map1n.c @@ -139,6 +139,15 @@ ARGV *cleanup_map1n_internal(CLEANUP_STATE *state, const char *addr, if ((lookup = mail_addr_map(maps, STR(state->temp1), propagate)) != 0) { saved_lhs = mystrdup(argv->argv[arg]); for (i = 0; i < lookup->argc; i++) { + if (strlen(lookup->argv[i]) > var_line_limit) { + msg_warn("%s: unreasonable %s result %.300s... -- " + "message not accepted, try again later", + state->queue_id, maps->title, lookup->argv[i]); + state->errs |= CLEANUP_STAT_DEFER; + UPDATE(state->reason, "4.6.0 Alias expansion error"); + UNEXPAND(argv, addr); + RETURN(argv); + } unquote_822_local(state->temp1, lookup->argv[i]); if (i == 0) { UPDATE(argv->argv[arg], STR(state->temp1)); diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index a2b8edb02..d2dd335f0 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,8 +20,8 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20141019" -#define MAIL_VERSION_NUMBER "2.8.19" +#define MAIL_RELEASE_DATE "20150208" +#define MAIL_VERSION_NUMBER "2.8.20" #ifdef SNAPSHOT # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE diff --git a/postfix/src/global/tok822_tree.c b/postfix/src/global/tok822_tree.c index 16cec946a..48d9d897c 100644 --- a/postfix/src/global/tok822_tree.c +++ b/postfix/src/global/tok822_tree.c @@ -259,11 +259,12 @@ TOK822 *tok822_sub_keep_after(TOK822 *t1, TOK822 *t2) TOK822 *tok822_free_tree(TOK822 *tp) { - if (tp) { - if (tp->next) - tok822_free_tree(tp->next); + TOK822 *next; + + for (/* void */; tp != 0; tp = next) { if (tp->head) tok822_free_tree(tp->head); + next = tp->next; tok822_free(tp); } return (0);