about summary refs log tree commit diff
diff options
context:
space:
mode:
-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'