Fix $regex<n> use-after-free. Bug 2915
[exim.git] / src / src / smtp_in.c
index 4a5c44714fcac9735389b004485ab96269cf6060..a15280bdcfdea6bbf34e1a5d988733ff2fad2cb6 100644 (file)
@@ -2157,8 +2157,10 @@ prdr_requested = FALSE;
 #ifdef SUPPORT_I18N
 message_smtputf8 = FALSE;
 #endif
+regex_vars_clear();
 body_linecount = body_zerocount = 0;
 
+lookup_value = NULL;                           /* Can be set by ACL */
 sender_rate = sender_rate_limit = sender_rate_period = NULL;
 ratelimiters_mail = NULL;           /* Updated by ratelimit ACL condition */
                    /* Note that ratelimiters_conn persists across resets. */
@@ -4099,11 +4101,16 @@ while (done <= 0)
            { DEBUG(D_auth) debug_printf("tls auth succeeded\n"); }
          else
            {
-           uschar * save_name = sender_host_authenticated;
            DEBUG(D_auth) debug_printf("tls auth not succeeded\n");
-           sender_host_authenticated = au->name;
-           (void) event_raise(event_action, US"auth:fail", s, NULL);
-           sender_host_authenticated = save_name;
+#ifndef DISABLE_EVENT
+            {
+             uschar * save_name = sender_host_authenticated, * logmsg;
+             sender_host_authenticated = au->name;
+             if ((logmsg = event_raise(event_action, US"auth:fail", s, NULL)))
+               log_write(0, LOG_MAIN, "%s", logmsg);
+             sender_host_authenticated = save_name;
+            }
+#endif
            }
          }
        break;
@@ -4208,13 +4215,19 @@ while (done <= 0)
          smtp_printf("%s\r\n", FALSE, smtp_resp);
          if (rc != OK)
            {
-           uschar * save_name = sender_host_authenticated;
-
-           log_write(0, LOG_MAIN|LOG_REJECT, "%s authenticator failed for %s: %s",
-             au->name, host_and_ident(FALSE), errmsg);
-           sender_host_authenticated = au->name;
-           (void) event_raise(event_action, US"auth:fail", smtp_resp, NULL);
-           sender_host_authenticated = save_name;
+           uschar * logmsg = NULL;
+#ifndef DISABLE_EVENT
+            {uschar * save_name = sender_host_authenticated;
+             sender_host_authenticated = au->name;
+             logmsg = event_raise(event_action, US"auth:fail", smtp_resp, NULL);
+             sender_host_authenticated = save_name;
+            }
+#endif
+           if (logmsg)
+             log_write(0, LOG_MAIN|LOG_REJECT, "%s", logmsg);
+           else
+             log_write(0, LOG_MAIN|LOG_REJECT, "%s authenticator failed for %s: %s",
+               au->name, host_and_ident(FALSE), errmsg);
            }
          }
        else