Use safer routine for possibly-overlapping copy
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 20 Oct 2017 22:21:27 +0000 (23:21 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Fri, 20 Oct 2017 22:53:14 +0000 (23:53 +0100)
Fixes a logging bug seen on aarch64

doc/doc-txt/ChangeLog
src/src/transports/smtp.c

index 4f7f6381866ed0ac0a93bb4b7b4da6114c3f0e70..9404b7a578b42e4092aadcfac445470963fb69e1 100644 (file)
@@ -173,6 +173,11 @@ JH/29 Fix queue_run_in_order to ignore the PID portion of the message ID.  This
       matters on fast-turnover and PID-randomising systems, which were getting
       out-of-order delivery.
 
+JH/30 Fix a logging bug on aarch64: an unsafe routine was previously used for
+      a possibly-overlapping copy.  The symptom was that "Remote host closed
+      connection in response to HELO" was logged instead of the actual 4xx
+      error for the HELO.
+
 
 Exim version 4.89
 -----------------
index 016f9783ff82cf7395f973ca76b41c07762ab2a4..ca06bf6bd8a7609dac1a72e6c26e8ececd8c8028 100644 (file)
@@ -1820,7 +1820,7 @@ goto SEND_QUIT;
        errno = ERRNO_SMTPCLOSED;
        goto EHLOHELO_FAILED;
        }
-      Ustrncpy(sx->buffer, rsp, sizeof(sx->buffer)/2);
+      memmove(sx->buffer, rsp, Ustrlen(rsp));
       goto RESPONSE_FAILED;
       }
     }
@@ -2176,11 +2176,6 @@ return OK;
     sx->send_quit = FALSE;
     goto FAILED;
 
-  /* This label is jumped to directly when a TLS negotiation has failed,
-  or was not done for a host for which it is required. Values will be set
-  in message and errno, and setting_up will always be true. Treat as
-  a temporary error. */
-
   EHLOHELO_FAILED:
     code = '4';
     message = string_sprintf("Remote host closed connection in response to %s"
@@ -2188,6 +2183,11 @@ return OK;
     sx->send_quit = FALSE;
     goto FAILED;
 
+  /* This label is jumped to directly when a TLS negotiation has failed,
+  or was not done for a host for which it is required. Values will be set
+  in message and errno, and setting_up will always be true. Treat as
+  a temporary error. */
+
 #ifdef SUPPORT_TLS
   TLS_FAILED:
     code = '4';