diff options
author | Ed Maste <emaste@FreeBSD.org> | 2022-09-27 19:19:19 +0000 |
---|---|---|
committer | Ed Maste <emaste@FreeBSD.org> | 2022-10-12 15:59:01 +0000 |
commit | 169487223143b1232ec4686b720b028af8d6d42b (patch) | |
tree | efd2ed2ac9916087e7e275b92288c9e7f0b8a614 | |
parent | b58094c0d98e5d0ab8abdcdb655ac902ae8ad66e (diff) | |
download | src-169487223143b1232ec4686b720b028af8d6d42b.tar.gz src-169487223143b1232ec4686b720b028af8d6d42b.zip |
dma: restore addition of newline when missing from input
If input mail does not have a newline on the last line dma must add
one. This was broken by the addition of long-line splitting, with the
switch from strlen(line) to linelen returned by getline().
PR: 266629
Reviewed by: bapt, Mikko Lehto
Tested by: Mikko Lehto
MFC after: 1 week
Fixes: b0b2d05fd060 ("Split body of mails not respecting...")
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D36763
-rw-r--r-- | contrib/dma/mail.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/contrib/dma/mail.c b/contrib/dma/mail.c index 9641818b8814..aa8d51c28d56 100644 --- a/contrib/dma/mail.c +++ b/contrib/dma/mail.c @@ -35,6 +35,7 @@ #include <errno.h> #include <inttypes.h> +#include <malloc_np.h> #include <signal.h> #include <strings.h> #include <string.h> @@ -418,8 +419,14 @@ readmail(struct queue *queue, int nodot, int recp_from_header) * If we fix it, it better be the last line of * the file. */ - line[linelen] = '\n'; - line[linelen + 1] = 0; + if ((size_t)linelen + 1 > linecap) { + line = realloc(line, linelen + 2); + if (line == NULL) + errlogx(EX_SOFTWARE, "realloc"); + linecap = malloc_usable_size(line); + } + line[linelen++] = '\n'; + line[linelen] = 0; had_last_line = 1; } if (!had_first_line) { |