Fix logging of cmdline args when starting in an unlinked cwd. Bug 2274
authorJeremy Harris <jgh146exb@wizmail.org>
Wed, 6 Jun 2018 10:19:23 +0000 (11:19 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Wed, 6 Jun 2018 10:19:23 +0000 (11:19 +0100)
doc/doc-txt/ChangeLog
src/src/exim.c

index 3edcb12fd63d58ca0a7be7f0dd116e15665d42fe..5fb0149dc6834bf2906850e0e78d45dadd56621b 100644 (file)
@@ -31,6 +31,9 @@ JH/06 Bug 2275: The MIME ACL unlocked the received message files early, and
 JH/08 When generating a selfsigned cert, use serial number 1 since zero is not
       legitimate.
 
+JH/09 Bug 2274: Fix logging of cmdline args when starting in an unlinked cwd.
+      Previously this would segfault.
+
 
 Exim version 4.91
 -----------------
index d740814f9eab856080b3cfa9adce9e4c4d6ba1cd..93a65dbcb48c9029c1b48934f837920173a5b4c5 100644 (file)
@@ -4083,14 +4083,23 @@ a debugging feature for finding out what arguments certain MUAs actually use.
 Don't attempt it if logging is disabled, or if listing variables or if
 verifying/testing addresses or expansions. */
 
-if (((debug_selector & D_any) != 0 || LOGGING(arguments))
-      && really_exim && !list_options && !checking)
+if (  (debug_selector & D_any  ||  LOGGING(arguments))
+   && really_exim && !list_options && !checking)
   {
   int i;
   uschar *p = big_buffer;
   Ustrcpy(p, "cwd= (failed)");
 
-  Ustrncpy(p + 4, initial_cwd, big_buffer_size-5);
+  if (!initial_cwd)
+    p += 13;
+  else
+    {
+    Ustrncpy(p + 4, initial_cwd, big_buffer_size-5);
+    p += 4 + Ustrlen(initial_cwd);
+    /* in case p is near the end and we don't provide enough space for
+     * string_format to be willing to write. */
+    *p = '\0';
+    }
 
   while (*p) p++;
   (void)string_format(p, big_buffer_size - (p - big_buffer), " %d args:", argc);