X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a344ed5d79d7bf9e78281b8effd0f70963e834bf..d0ae0c245cec54166b98cde12f2c42f0c1b6da3a:/uip/mhparse.c diff --git a/uip/mhparse.c b/uip/mhparse.c index 0c2c17cd..d729768a 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -34,13 +34,16 @@ int checksw = 0; /* check Content-MD5 field */ * in a multipart. * 2) Suppress the warning about bogus multipart content, and report it. * 3) Suppress the warning about extraneous trailing ';' in header parameter - * lists, and report it. + * lists. */ int skip_mp_cte_check; int suppress_bogus_mp_content_warning; int bogus_mp_content; int suppress_extraneous_trailing_semicolon_warning; -int extraneous_trailing_semicolon; + +/* + * By default, suppress warning about multiple MIME-Version header fields. + */ int suppress_multiple_mime_version_warning = 1; /* list of preferred type/subtype pairs, for -prefer */ @@ -207,6 +210,8 @@ parse_mime (char *file) CT ct; size_t n; + bogus_mp_content = 0; + /* * Check if file is actually standard input */ @@ -657,10 +662,7 @@ get_ctinfo (char *cp, CT ct, int magic) TYPE_FIELD, ct->c_file); return NOTOK; } - - /* down case the content type string */ - for (dp = ci->ci_type; *dp; dp++) - *dp = tolower ((unsigned char) *dp); + ToLower(ci->ci_type); while (isspace ((unsigned char) *cp)) cp++; @@ -695,10 +697,7 @@ get_ctinfo (char *cp, CT ct, int magic) TYPE_FIELD, ct->c_file, ci->ci_type); return NOTOK; } - - /* down case the content subtype string */ - for (dp = ci->ci_subtype; *dp; dp++) - *dp = tolower ((unsigned char) *dp); + ToLower(ci->ci_subtype); magic_skip: while (isspace ((unsigned char) *cp)) @@ -718,10 +717,8 @@ magic_skip: * Get any given in buffer */ if (magic && *cp == '<') { - if (ct->c_id) { - free (ct->c_id); - ct->c_id = NULL; - } + mh_xfree(ct->c_id); + ct->c_id = NULL; if (!(dp = strchr(ct->c_id = ++cp, '>'))) { advise (NULL, "invalid ID in message %s", ct->c_file); return NOTOK; @@ -1228,7 +1225,7 @@ end_part: continue; *next = NULL; free_content (p); - free ((char *) part); + free(part); } } @@ -1840,7 +1837,7 @@ openBase64 (CT ct, char **file) for (i = 0; i < decoded_len; ++i) { putc (*decoded_p++, ce->ce_fp); } - free ((char *) decoded); + free(decoded); if (ferror (ce->ce_fp)) { content_error (ce->ce_file, ct, "error writing to"); goto clean_up; @@ -2748,8 +2745,7 @@ openMail (CT ct, char **file) /* showproc is for mhshow and mhstore, though mhlist -debug * prints it, too. */ - if (ct->c_showproc) - free (ct->c_showproc); + mh_xfree(ct->c_showproc); ct->c_showproc = add ("true", NULL); fseek (ce->ce_fp, 0L, SEEK_SET); @@ -3291,7 +3287,6 @@ parse_header_attrs (const char *filename, const char *fieldname, "parameter list", filename, fieldname); } - extraneous_trailing_semicolon = 1; return DONE; } @@ -3406,8 +3401,7 @@ parse_header_attrs (const char *filename, const char *fieldname, "field\n%*s(parameter %s)", filename, fieldname, strlen(invo_name) + 2, "", nameptr); free(nameptr); - if (charset) - free(charset); + mh_xfree(charset); return NOTOK; } @@ -3432,10 +3426,8 @@ parse_header_attrs (const char *filename, const char *fieldname, filename, fieldname, strlen(invo_name) + 2, "", nameptr); free(nameptr); - if (charset) - free(charset); - if (lang) - free(lang); + mh_xfree(charset); + mh_xfree(lang); return NOTOK; } vp += 2; @@ -3478,10 +3470,8 @@ bad_quote: filename, fieldname, strlen(invo_name) + 2, "", nameptr); free(nameptr); - if (charset) - free(charset); - if (lang) - free(lang); + mh_xfree(charset); + mh_xfree(lang); return NOTOK; case '"': break; @@ -3533,8 +3523,11 @@ bad_quote: if (partial) { for (pp = phead; pp != NULL; pp = pp->next) { - if (strcasecmp(nameptr, pp->name) == 0) + if (strcasecmp(nameptr, pp->name) == 0) { + free (nameptr); + nameptr = pp->name; break; + } } if (pp == NULL) { @@ -3563,7 +3556,6 @@ bad_quote: "%s's %s: field\n%*s(parameter %s)", sp->index, filename, fieldname, strlen(invo_name) + 2, "", nameptr); - free (nameptr); return NOTOK; } if (sp2->index < sp->index && @@ -3579,7 +3571,6 @@ bad_quote: "param in message %s's %s: field\n%*s(parameter %s)", filename, fieldname, strlen(invo_name) + 2, "", nameptr); - free (nameptr); return NOTOK; } } @@ -3589,11 +3580,9 @@ bad_quote: */ if (index == 0 && encoded) { - if (pp->charset) - free(pp->charset); + mh_xfree(pp->charset); pp->charset = charset; - if (pp->lang) - free(pp->lang); + mh_xfree(pp->lang); pp->lang = lang; } } else { @@ -3693,8 +3682,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external) if (strlen(params->pm_name) > CPERLIN) { advise(NULL, "Parameter name \"%s\" is too long", params->pm_name); - if (paramout) - free(paramout); + mh_xfree(paramout); return NULL; } @@ -3731,8 +3719,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external) numchars, valoff); if (i == 0) { - if (paramout) - free(paramout); + mh_xfree(paramout); return NULL; } @@ -3795,8 +3782,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external) strlen(params->pm_value + valoff), valoff); if (i == 0) { - if (paramout) - free(paramout); + mh_xfree(paramout); return NULL; }