]> diplodocus.org Git - nmh/blobdiff - uip/mhfixmsg.c
Always initialize those two variables made static in commit
[nmh] / uip / mhfixmsg.c
index 307aba5aef6173081d263bde4b7ef40ec2b8fdc8..f80ff9be156bb87d71048e89f40eac571ca7da2c 100644 (file)
@@ -1885,9 +1885,24 @@ fix_always (CT ct, int *message_mods) {
         HF hf;
 
         for (hf = ct->c_first_hf; hf; hf = hf->next) {
         HF hf;
 
         for (hf = ct->c_first_hf; hf; hf = hf->next) {
-            const size_t len = strlen (hf->value);
+            size_t len = strlen (hf->value);
 
 
-            if (hf->value[len - 1] == '\n'  &&  hf->value[len - 2] == ';') {
+            if (strcasecmp (hf->name, TYPE_FIELD) != 0  &&
+                strcasecmp (hf->name, DISPO_FIELD) != 0) {
+                /* Only do this for Content-Type and
+                   Content-Disposition fields because those are the
+                   only headers that parse_mime() warns about. */
+                continue;
+            }
+
+            /* whitespace following a trailing ';' will be nuked as well */
+            if (hf->value[len - 1] == '\n') {
+                while (isspace((unsigned char)(hf->value[len - 2]))) {
+                    if (len-- == 0) { break; }
+                }
+            }
+
+            if (hf->value[len - 2] == ';') {
                 /* Remove trailing ';' from parameter value. */
                 hf->value[len - 2] = '\n';
                 hf->value[len - 1] = '\0';
                 /* Remove trailing ';' from parameter value. */
                 hf->value[len - 2] = '\n';
                 hf->value[len - 1] = '\0';
@@ -1895,10 +1910,13 @@ fix_always (CT ct, int *message_mods) {
                 /* Also, if Content-Type parameter, remove trailing ';'
                    from ct->c_ctline.  This probably isn't necessary
                    but can't hurt. */
                 /* Also, if Content-Type parameter, remove trailing ';'
                    from ct->c_ctline.  This probably isn't necessary
                    but can't hurt. */
-                if (strcasecmp (hf->name, "Content-Type") == 0  &&
-                    ct->c_ctline  &&
-                    ct->c_ctline[strlen(ct->c_ctline) - 1] == ';') {
-                    ct->c_ctline[strlen(ct->c_ctline) - 1] = '\0';
+                if (strcasecmp(hf->name, TYPE_FIELD) == 0 && ct->c_ctline) {
+                    size_t l = strlen(ct->c_ctline) - 1;
+                    while (isspace((unsigned char)(ct->c_ctline[l])) ||
+                           ct->c_ctline[l] == ';') {
+                        ct->c_ctline[l--] = '\0';
+                        if (l == 0) { break; }
+                    }
                 }
 
                 ++*message_mods;
                 }
 
                 ++*message_mods;