aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2022-09-27 19:19:19 +0000
committerEd Maste <emaste@FreeBSD.org>2022-10-12 15:59:01 +0000
commit169487223143b1232ec4686b720b028af8d6d42b (patch)
treeefd2ed2ac9916087e7e275b92288c9e7f0b8a614
parentb58094c0d98e5d0ab8abdcdb655ac902ae8ad66e (diff)
downloadsrc-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.c11
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) {