From: Kevin McCarthy Date: Mon, 10 Dec 2018 01:41:58 +0000 (-0800) Subject: Parse and store mime headers in the BODY X-Git-Tag: 2019-10-25~396^2~33 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ff923fa197d6e2ff56d5e452960b180f74be2f56;p=neomutt Parse and store mime headers in the BODY Don't store the field in the header cache though. Co-authored-by: Richard Russon --- diff --git a/email/body.c b/email/body.c index f4e05064d..1426809a8 100644 --- a/email/body.c +++ b/email/body.c @@ -32,6 +32,7 @@ #include "mutt/mutt.h" #include "body.h" #include "email.h" +#include "envelope.h" #include "mime.h" #include "parameter.h" @@ -90,6 +91,7 @@ void mutt_body_free(struct Body **p) mutt_email_free(&b->email); } + mutt_env_free(&b->mime_headers); mutt_body_free(&b->parts); FREE(&b); } diff --git a/email/body.h b/email/body.h index 76dd2082b..0ab93e8a9 100644 --- a/email/body.h +++ b/email/body.h @@ -64,6 +64,8 @@ struct Body time_t stamp; /**< time stamp of last encoding update. */ + struct Envelope *mime_headers; /**< memory hole protected headers */ + unsigned int type : 4; /**< content-type primary type */ unsigned int encoding : 3; /**< content-transfer-encoding */ unsigned int disposition : 2; /**< content-disposition */ diff --git a/email/parse.c b/email/parse.c index 6acce1cca..1f56f6624 100644 --- a/email/parse.c +++ b/email/parse.c @@ -1161,6 +1161,7 @@ struct Envelope *mutt_rfc822_read_header(FILE *f, struct Email *e, bool user_hdr struct Body *mutt_read_mime_header(FILE *fp, bool digest) { struct Body *p = mutt_body_new(); + struct Envelope *env = mutt_env_new(); char *c = NULL; char *line = mutt_mem_malloc(LONG_STRING); size_t linelen = LONG_STRING; @@ -1224,6 +1225,11 @@ struct Body *mutt_read_mime_header(FILE *fp, bool digest) } } #endif + else + { + if (mutt_rfc822_parse_line(env, NULL, line, c, false, false, false)) + p->mime_headers = env; + } } p->offset = ftello(fp); /* Mark the start of the real data */ if (p->type == TYPE_TEXT && !p->subtype) @@ -1233,6 +1239,11 @@ struct Body *mutt_read_mime_header(FILE *fp, bool digest) FREE(&line); + if (p->mime_headers) + rfc2047_decode_envelope(p->mime_headers); + else + mutt_env_free(&env); + return p; } diff --git a/hcache/serialize.c b/hcache/serialize.c index ad0260782..5676e230d 100644 --- a/hcache/serialize.c +++ b/hcache/serialize.c @@ -427,6 +427,7 @@ unsigned char *serial_dump_body(struct Body *c, unsigned char *d, int *off, bool nb.parts = NULL; nb.email = NULL; nb.aptr = NULL; + nb.mime_headers = NULL; nb.language = NULL; lazy_realloc(&d, *off + sizeof(struct Body));