about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--mmime.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/mmime.c b/mmime.c
index 5c18171..b55d301 100644
--- a/mmime.c
+++ b/mmime.c
@@ -59,6 +59,11 @@ int gen_b64(uint8_t *s, off_t size)
 	return 0;
 }
 
+#define qphrasevalid(c) ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || \
+                         (c >= 'a' && c <= 'z') || \
+                         c == '!' || c == '*' || c == '+' || c == '-' || \
+                         c == '/')
+
 size_t
 gen_qp(uint8_t *s, off_t size, size_t maxlinelen, size_t linelen)
 {
@@ -123,6 +128,10 @@ gen_qp(uint8_t *s, off_t size, size_t maxlinelen, size_t linelen)
 			putc_unlocked('\n', stdout);
 			linelen = 0;
 			prev = 0;
+		} else if (header && !qphrasevalid(s[i])) {
+			printf("=%02X", s[i]);
+			linelen += 3;
+			prev = '_';
 		} else {
 			putc_unlocked(s[i], stdout);
 			linelen++;