From 9eb44b03f7274bea0c22146a900ff078777cbf13 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Mon, 18 Sep 2023 16:38:04 +0200 Subject: [PATCH] always attach headers to naivemime --- src/imf/mod.rs | 9 --------- src/part/composite.rs | 42 ++++++++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/imf/mod.rs b/src/imf/mod.rs index b920c49..b7b30c8 100644 --- a/src/imf/mod.rs +++ b/src/imf/mod.rs @@ -51,15 +51,6 @@ pub struct Imf<'a> { // MIME pub mime_version: Option, - - // Raw fields - pub kv: Vec>, -} -impl<'a> Imf<'a> { - pub fn with_kv(mut self, v: Vec>) -> Self { - self.kv = v; - self - } } //@FIXME min and max limits are not enforced, diff --git a/src/part/composite.rs b/src/part/composite.rs index fabe5f5..402ecc9 100644 --- a/src/part/composite.rs +++ b/src/part/composite.rs @@ -162,6 +162,7 @@ pub fn message<'a>( m: mime::MIME<'a, mime::r#type::DeductibleMessage>, ) -> impl Fn(&'a [u8]) -> IResult<&'a [u8], Message<'a>> { move |input: &[u8]| { + let mut parent_mime = m.clone(); let orig = input; // parse header fields @@ -175,10 +176,10 @@ pub fn message<'a>( // aggregate header fields let (naive_mime, imf) = part::field::split_and_build(&headers); - // Bind headers to the IMF object - let imf = imf.with_kv(headers); + // Bind headers to parent mime object + parent_mime.fields = parent_mime.fields.with_kv(headers); - // interpret headers to choose a mime type + // interpret headers to choose the child mime type let in_mime = naive_mime .with_raw(raw_headers) .to_interpreted::() @@ -195,7 +196,7 @@ pub fn message<'a>( Ok(( input, Message { - mime: m.clone(), + mime: parent_mime, imf, raw_part, raw_headers, @@ -439,7 +440,25 @@ OoOoOoOoOoOoOoOoOoOoOoOoOoOoOoOoO
Ok(( &[][..], Message { - mime: base_mime, + mime: mime::MIME { + interpreted_type: base_mime.interpreted_type, + fields: mime::NaiveMIME { + kv: vec![ + header::Field::Good(header::Kv2(&b"Date"[..], &b"Sat, 8 Jul 2023 07:14:29 +0200"[..])), + header::Field::Good(header::Kv2(&b"From"[..], &b"Grrrnd Zero "[..])), + header::Field::Good(header::Kv2(&b"To"[..], &b"John Doe "[..])), + header::Field::Good(header::Kv2(&b"CC"[..], &b"=?ISO-8859-1?Q?Andr=E9?= Pirard "[..])), + header::Field::Good(header::Kv2(&b"Subject"[..], &b"=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\n =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="[..])), + header::Field::Good(header::Kv2(&b"X-Unknown"[..], &b"something something"[..])), + header::Field::Bad(&b"Bad entry\n on multiple lines\n"[..]), + header::Field::Good(header::Kv2(&b"Message-ID"[..], &b""[..])), + header::Field::Good(header::Kv2(&b"MIME-Version"[..], &b"1.0"[..])), + header::Field::Good(header::Kv2(&b"Content-Type"[..], &b"multipart/alternative;\n boundary=\"b1_e376dc71bafc953c0b0fdeb9983a9956\""[..])), + header::Field::Good(header::Kv2(&b"Content-Transfer-Encoding"[..], &b"7bit"[..])), + ], + ..base_mime.fields + }, + }, raw_part: fullmail, raw_headers: hdrs, raw_body: body, @@ -506,19 +525,6 @@ OoOoOoOoOoOoOoOoOoOoOoOoOoOoOoOoO
right: &b"www.grrrndzero.org"[..], }), mime_version: Some(imf::mime::Version { major: 1, minor: 0}), - kv: vec![ - header::Field::Good(header::Kv2(&b"Date"[..], &b"Sat, 8 Jul 2023 07:14:29 +0200"[..])), - header::Field::Good(header::Kv2(&b"From"[..], &b"Grrrnd Zero "[..])), - header::Field::Good(header::Kv2(&b"To"[..], &b"John Doe "[..])), - header::Field::Good(header::Kv2(&b"CC"[..], &b"=?ISO-8859-1?Q?Andr=E9?= Pirard "[..])), - header::Field::Good(header::Kv2(&b"Subject"[..], &b"=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\n =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="[..])), - header::Field::Good(header::Kv2(&b"X-Unknown"[..], &b"something something"[..])), - header::Field::Bad(&b"Bad entry\n on multiple lines\n"[..]), - header::Field::Good(header::Kv2(&b"Message-ID"[..], &b""[..])), - header::Field::Good(header::Kv2(&b"MIME-Version"[..], &b"1.0"[..])), - header::Field::Good(header::Kv2(&b"Content-Type"[..], &b"multipart/alternative;\n boundary=\"b1_e376dc71bafc953c0b0fdeb9983a9956\""[..])), - header::Field::Good(header::Kv2(&b"Content-Transfer-Encoding"[..], &b"7bit"[..])), - ], ..imf::Imf::default() }, child: Box::new(AnyPart::Mult(Multipart {