an earlier supported version, or when sharing Postfix 3.6
configuration files with an earlier supported Postfix
version. File: global/mail_params.c.
+
+20210623
+
+ Bugfix (introduced: 1999, Postfix 2.11) latent false "Result too
+ large" (ERANGE) errors because an strtol() call had no 'errno
+ = 0' statement before the call. Back-ported from Postfix 3.6.
+ Files: postscreen/postscreen_tests.c, util/mac_expand.c.
+
+20210705
+
+ Bugfix (introduced: Postfix 3.3): "null pointer read" error
+ in the cleanup daemon when "header_from_format = standard"
+ (the default as of Postfix 3.3) and email was submitted
+ with /usr/sbin/sendmail without From: header, and an all-space
+ full name was specified in 1) the password file, 2) with
+ "sendmail -F", or 3) with the NAME environment variable.
+ Found by Renaud Metrich. File: cleanup/cleanup_message.c.
+
+20210708
+
+ Bugfix (introduced: 1999): the Postfix SMTP server was
+ sending all session transcripts to the error_notice_recipient,
+ instead of sending transcripts of bounced mail to the
+ bounce_notice_recipient. File: smtpd/smtpd_chat.c.
+
+20210713
+
+ Bugfix (introduced: Postfix 2.4): false "too many reverse
+ jump" warnings in the showq daemon. The loop detection code
+ was comparing memory addresses instead of queue file names.
+ It now properly compares strings. Reported by Mehmet Avcioglu.
+ File: global/record.c.
} else {
token = tok822_alloc(TOK822_QSTRING, state->fullname);
}
- tok822_externalize(state->temp2, token, TOK822_STR_NONE);
- tok822_free(token);
- vstring_sprintf_append(state->temp2, " <%s>",
+ if (token) {
+ tok822_externalize(state->temp2, token, TOK822_STR_NONE);
+ tok822_free(token);
+ vstring_strcat(state->temp2, " ");
+ }
+ vstring_sprintf_append(state->temp2, "<%s>",
vstring_str(state->temp1));
break;
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20210613"
-#define MAIL_VERSION_NUMBER "3.3.18"
+#define MAIL_RELEASE_DATE "20210724"
+#define MAIL_VERSION_NUMBER "3.3.19"
#ifdef SNAPSHOT
#define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
int rec_goto(VSTREAM *stream, const char *buf)
{
off_t offset;
- static const char *saved_path;
+ static char *saved_path;
static off_t saved_offset;
static int reverse_count;
* is likely to insert 10000 message headers, but someone might append
* 10000 recipients.
*/
-#define STREQ(x,y) ((x) == (y) && strcmp((x), (y)) == 0)
#define REVERSE_JUMP_LIMIT 10000
- if (!STREQ(saved_path, VSTREAM_PATH(stream))) {
- saved_path = VSTREAM_PATH(stream);
+ if (saved_path == 0 || strcmp(saved_path, VSTREAM_PATH(stream)) != 0) {
+ if (saved_path)
+ myfree(saved_path);
+ saved_path = mystrdup(VSTREAM_PATH(stream));
reverse_count = 0;
saved_offset = 0;
}
* at the time that the cache entry was written.
*/
for (sp = time_stamps; sp < time_stamps + PSC_TINDX_COUNT; sp++) {
+ errno = 0;
*sp = strtoul(start, &cp, 10);
if (*start == 0 || (*cp != '\0' && *cp != ';') || errno == ERANGE)
*sp = PSC_TIME_STAMP_DISABLED;
int var_defer_code;
int var_smtpd_err_sleep;
int var_non_fqdn_code;
+char *var_bounce_rcpt;
char *var_error_rcpt;
int var_smtpd_delay_reject;
char *var_rest_classes;
VAR_EOD_CHECKS, DEF_EOD_CHECKS, &var_eod_checks, 0, 0,
VAR_MAPS_RBL_DOMAINS, DEF_MAPS_RBL_DOMAINS, &var_maps_rbl_domains, 0, 0,
VAR_RBL_REPLY_MAPS, DEF_RBL_REPLY_MAPS, &var_rbl_reply_maps, 0, 0,
+ VAR_BOUNCE_RCPT, DEF_ERROR_RCPT, &var_bounce_rcpt, 1, 0,
VAR_ERROR_RCPT, DEF_ERROR_RCPT, &var_error_rcpt, 1, 0,
VAR_REST_CLASSES, DEF_REST_CLASSES, &var_rest_classes, 0, 0,
VAR_CANONICAL_MAPS, DEF_CANONICAL_MAPS, &var_canonical_maps, 0, 0,
#define INDENT 4
notice = post_mail_fopen_nowait(mail_addr_double_bounce(),
- var_error_rcpt,
+ (state->error_mask & MAIL_ERROR_BOUNCE) ?
+ var_bounce_rcpt : var_error_rcpt,
MAIL_SRC_MASK_NOTIFY, NULL_TRACE_FLAGS,
SMTPUTF8_FLAG_NONE, NO_QUEUE_ID);
if (notice == 0) {
long result;
char *remainder;
+ errno = 0;
result = strtol(strval, &remainder, 10);
if (*strval == 0 /* can't happen */ || *remainder != 0 || errno == ERANGE)
msg_fatal("mac_exp_eval: bad conversion: %s", strval);