X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/951b668a191ef510a4e27d8204c5fa82ca957a07..dbbc1c20b59dc10368e31a7c81f110eb40b36494:/src/src/deliver.c diff --git a/src/src/deliver.c b/src/src/deliver.c index b5530bcf7..e931d22e9 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -6161,12 +6161,11 @@ else if (system_filter && process_recipients != RECIP_FAIL_TIMEOUT) { uschar *tmp = expand_string(tpname); address_file = address_pipe = NULL; - uschar *m; if (!tmp) p->message = string_sprintf("failed to expand \"%s\" as a " "system filter transport name", tpname); { uschar *m; - if (m = is_tainted2(tmp, 0, "Tainted values '%s' " "for transport '%s' as a system filter", tmp, tpname)) + if ((m = is_tainted2(tmp, 0, "Tainted values '%s' " "for transport '%s' as a system filter", tmp, tpname))) p->message = m; } tpname = tmp; @@ -6555,14 +6554,19 @@ while (addr_new) /* Loop until all addresses dealt with */ /* Treat /dev/null as a special case and abandon the delivery. This avoids having to specify a uid on the transport just for this case. - Arrange for the transport name to be logged as "**bypassed**". */ + Arrange for the transport name to be logged as "**bypassed**". + Copy the transport for this fairly unusual case rather than having + to make all transports mutable. */ if (Ustrcmp(addr->address, "/dev/null") == 0) { - uschar *save = addr->transport->name; - addr->transport->name = US"**bypassed**"; + transport_instance * save_t = addr->transport; + transport_instance * t = store_get(sizeof(*t), is_tainted(save_t)); + *t = *save_t; + t->name = US"**bypassed**"; + addr->transport = t; (void)post_process_one(addr, OK, LOG_MAIN, EXIM_DTYPE_TRANSPORT, '='); - addr->transport->name = save; + addr->transport= save_t; continue; /* with the next new address */ }