aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2021-08-07 19:33:08 +0200
committerLeah Neukirchen <leah@vuxu.org>2021-08-07 19:33:08 +0200
commit4ccf2f08c1aa8b15f31ac469edebe6c4710d74f1 (patch)
tree76dcdb6a8245393ab4480e076ddf1ad006cbe124
parent65d43e3cea10e40f65e9cd1b49ef1ddaed514a14 (diff)
downloadmblaze-4ccf2f08c1aa8b15f31ac469edebe6c4710d74f1.tar.gz
mblaze-4ccf2f08c1aa8b15f31ac469edebe6c4710d74f1.tar.xz
mblaze-4ccf2f08c1aa8b15f31ac469edebe6c4710d74f1.zip
mmime: ensure no empty parts are generated after an include.
Reported by lhynes.
-rw-r--r--mmime.c13
-rwxr-xr-xt/1000-mmime.t11
2 files changed, 19 insertions, 5 deletions
diff --git a/mmime.c b/mmime.c
index 7d47a20..f082cf0 100644
--- a/mmime.c
+++ b/mmime.c
@@ -423,6 +423,7 @@ gen_build()
size_t linelen = 0;
int inheader = 1;
int intext = 0;
+ int emptybody = 1;
int ret = 0;
char *contenttype = 0;
char *contenttransferenc = 0;
@@ -430,12 +431,13 @@ gen_build()
while (1) {
ssize_t read = getdelim(&line, &linelen, '\n', stdin);
if (read == -1) {
- if (!intext && !rflag)
+ if (feof(stdin)) {
+ if (!emptybody)
+ break;
line = strdup(inheader ? "\n" : "");
- else if (feof(stdin))
- break;
- else
+ } else { // errored
exit(1);
+ }
}
if (inheader) {
if (line[0] == '\n') {
@@ -476,6 +478,7 @@ gen_build()
if (gen_file(f+1, line+1) != 0)
ret = 1;
intext = 0;
+ emptybody = 0;
continue;
}
*f = of;
@@ -496,6 +499,8 @@ gen_build()
printf("%s", line);
else
gen_qp((uint8_t *)line, strlen(line), 78, 0);
+
+ emptybody = 0;
}
if (!rflag && !inheader)
printf("\n--%s--\n", sep);
diff --git a/t/1000-mmime.t b/t/1000-mmime.t
index 0408d32..6d4c40c 100755
--- a/t/1000-mmime.t
+++ b/t/1000-mmime.t
@@ -1,7 +1,8 @@
#!/bin/sh -e
cd ${0%/*}
. ./lib.sh
-plan 16
+
+plan 17
cat <<EOF >tmp
References: <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@a> <bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb@b> <ccccccccccccccccccccccccccccccc@c>
@@ -115,3 +116,11 @@ Body.
EOF
check 'non-encoded quoted-strings are kept correctly' 'mmime <tmp2 | grep \"@'
+
+cat <<EOF >tmp2
+Subject: inclusion without further content
+
+#message/rfc822#inline $PWD/tmp
+EOF
+
+check 'no empty parts are generated after inclusion lines' '! mmime <tmp2 | mshow -t - | grep -q size=0'