From 143328edd5842208e53d3f2427a6059d604eb78e Mon Sep 17 00:00:00 2001 From: Philipp Takacs Date: Fri, 25 Nov 2016 13:38:04 +0100 Subject: [PATCH] mhparse add support for CRLF multipart mime content wasn't able to parse, if the mail use CRLF line endings. --- h/mhparse.h | 1 + uip/mhparse.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/h/mhparse.h b/h/mhparse.h index 782ab51..1ff37bf 100644 --- a/h/mhparse.h +++ b/h/mhparse.h @@ -91,6 +91,7 @@ struct Content { char *c_partno; /* within multipart content */ /* Content-Type info */ + boolean crlf; /* are the line ending CRLF */ struct CTinfo c_ctinfo; /* parsed elements of Content-Type */ int c_type; /* internal flag for content type */ int c_subtype; /* internal flag for content subtype */ diff --git a/uip/mhparse.c b/uip/mhparse.c index 8e8b360..a478b42 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -254,6 +254,9 @@ get_content(FILE *in, char *file, int toplevel) state = FLD2; /* FALL */ case FLD2: + if (compnum == 1) { + ct->crlf = f.value[f.valuelen-2] == '\r'; + } compnum++; /* add the header data to the list */ @@ -1072,8 +1075,14 @@ InitMultiPart(CT ct) *++dp = '\0'; /* record boundary separators */ - m->mp_start = concat(bp, "\n", NULL); - m->mp_stop = concat(bp, "--\n", NULL); + if (!ct->crlf) { + m->mp_start = concat(bp, "\n", NULL); + m->mp_stop = concat(bp, "--\n", NULL); + } else { + m->mp_start = concat(bp, "\r\n", NULL); + m->mp_stop = concat(bp, "--\r\n", NULL); + } + if (!ct->c_fp && (ct->c_fp = fopen(ct->c_file, "r")) == NULL) { advise(ct->c_file, "unable to open for reading"); -- 1.7.10.4