From 5b389106e9bfb05edbbcbdc847e09437f2390da0 Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Sun, 25 Oct 2015 21:34:20 +0100 Subject: [PATCH] send: MIMEify with non-ascii header and ascii body! This code is not perfect, as it scans body lines twice. We might want to rework it someday. But, ignoring the minor performance issue, it ensures, that we MIMEify in the case when some headers contain non-ASCII text but the body does not. --- uip/send.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/uip/send.c b/uip/send.c index ec9b76d..bab1699 100644 --- a/uip/send.c +++ b/uip/send.c @@ -320,13 +320,26 @@ sendsbr(char **vec, int vecp, char *drft, struct stat *st) } static int +contains_non_ascii(char *str) +{ + char *cp; + + for (cp = str; *cp; cp++) { + if (*cp > 127 || *cp < 0) { + return 1; + } + } + return 0; +} + +static int attach(char *draft_file_name) { char buf[MAXPATHLEN + 6]; int c; int has_attachment; - int has_body; - int non_ascii; /* msg body contains non-ASCII chars */ + int has_body = 0; + int non_ascii = 0; /* msg body or hdr contains non-ASCII chars */ int length; /* length of attachment header field name */ char *p; @@ -347,6 +360,9 @@ attach(char *draft_file_name) field[length] == ':') { has_attachment = 1; } + if (contains_non_ascii(field)) { + non_ascii = 1; + } } /* @@ -355,16 +371,14 @@ attach(char *draft_file_name) ** Check if body contains at least one non-blank (= not empty) ** and if it contains any non-ASCII chars (= need MIME). */ - has_body = 0; - non_ascii = 0; while (get_line() != EOF) { - for (p = field; *p != '\0'; p++) { - if (*p != ' ' && *p != '\t') { + if (contains_non_ascii(field)) { + non_ascii = 1; + } + for (p = field; *p; p++) { + if (isgraph(*p)) { has_body = 1; } - if (*p > 127 || *p < 0) { - non_ascii = 1; - } } if (has_body && non_ascii) { break; /* that's been already enough information */ -- 1.7.10.4