X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/430ffdd38f6ea76f20d8559a3e2a6f7835117d47..3c0c7703cd4267119943391e31aa3b7e9d708fa7:/uip/mhbuildsbr.c diff --git a/uip/mhbuildsbr.c b/uip/mhbuildsbr.c index 58540f1b..d96e0d54 100644 --- a/uip/mhbuildsbr.c +++ b/uip/mhbuildsbr.c @@ -78,7 +78,7 @@ void free_encoding (CT, int); * static prototypes */ static int init_decoded_content (CT); -static void setup_attach_content(CT, const char *); +static void setup_attach_content(CT, char *); static char *fgetstr (char *, int, FILE *); static int user_content (FILE *, char *, char *, CT *); static void set_id (CT, int); @@ -211,10 +211,30 @@ build_mime (char *infile, int directives, int header_encoding) if (strcasecmp(ATTACH_FIELD, np) == 0) { struct attach_list *entry; + char *s = vp, *e = vp + strlen(vp) - 1; free(np); + + /* + * Make sure we can find the start of this filename. + * If it's blank, we skip completely. Otherwise, strip + * off any leading spaces and trailing newlines. + */ + + while (isspace((unsigned char) *s)) + s++; + + while (e > s && *e == '\n') + *e-- = '\0'; + + if (*s == '\0') { + free(vp); + goto finish_field; + } + entry = mh_xmalloc(sizeof(*entry)); - entry->filename = vp; - if (! attach_tail) { + entry->filename = getcpy(s); + free(vp); + if (attach_tail) { attach_tail->next = entry; attach_tail = entry; } else { @@ -320,7 +340,7 @@ finish_field: struct part *part; CT p; - if (! access(at_entry->filename, R_OK)) { + if (access(at_entry->filename, R_OK) != 0) { adios("reading", "Unable to open %s for", at_entry->filename); } @@ -1778,9 +1798,9 @@ calculate_digest (CT ct, int asciiP) */ static void -setup_attach_content(CT ct, const char *filename) +setup_attach_content(CT ct, char *filename) { - char *type, **ap, **ep; + char *type, **ap, **ep, *simplename = r1bindex(filename, '/'); struct str2init *s2i; if (! (type = mime_type(filename))) { @@ -1842,17 +1862,19 @@ setup_attach_content(CT ct, const char *filename) if (strcasecmp(*ap, "name") == 0) { if (*ep) free(*ep); - *ep = getcpy(filename); + *ep = getcpy(simplename); break; } } if (*ap == NULL) { *ap = getcpy("name"); - *ep = getcpy(filename); + *ep = getcpy(simplename); } - ct->c_descr = getcpy(filename); + ct->c_descr = getcpy(simplename); + ct->c_descr = add("\n", ct->c_descr); + ct->c_cefile.ce_file = getcpy(filename); /* * If it's a text/calendar, we need to make sure it's an inline, @@ -1867,6 +1889,6 @@ setup_attach_content(CT ct, const char *filename) ct->c_dispo = getcpy("attachment; filename=\""); } - ct->c_dispo = add(filename, ct->c_dispo); - ct->c_dispo = add("\"", ct->c_dispo); + ct->c_dispo = add(simplename, ct->c_dispo); + ct->c_dispo = add("\"\n", ct->c_dispo); }