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';
/* 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;