From 0ef6a3060a833744b602d56e501e6ea085ce3f86 Mon Sep 17 00:00:00 2001 From: bjoern Date: Fri, 5 Feb 2021 20:57:38 +0100 Subject: [PATCH] fix From:-header bug (#2193) * add failing test for From:-header bug the test fails on the last check for quote-encapsulated utf-8 strings. * Update mailparse Co-authored-by: link2xt --- Cargo.lock | 4 ++-- src/mimeparser.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 09d99832d..dbde0f9e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2079,9 +2079,9 @@ dependencies = [ [[package]] name = "mailparse" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a77a7f161b32d0314404306b8ed5966b34b797fc9ef6bcf6686935162da3c" +checksum = "31de1f9043c582efde7dbd93de56600df12b6c4488a67eeaefa74ea364019b22" dependencies = [ "base64 0.12.3", "charset", diff --git a/src/mimeparser.rs b/src/mimeparser.rs index d47089df4..488c1282c 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -1474,6 +1474,62 @@ mod tests { } } + #[async_std::test] + async fn test_mimeparser_fromheader() { + let ctx = TestContext::new_alice().await; + + let mimemsg = MimeMessage::from_bytes(&ctx, b"From: g@c.de\n\nhi") + .await + .unwrap(); + let contact = mimemsg.from.first().unwrap(); + assert_eq!(contact.addr, "g@c.de"); + assert_eq!(contact.display_name, None); + + let mimemsg = MimeMessage::from_bytes(&ctx, b"From: g@c.de \n\nhi") + .await + .unwrap(); + let contact = mimemsg.from.first().unwrap(); + assert_eq!(contact.addr, "g@c.de"); + assert_eq!(contact.display_name, None); + + let mimemsg = MimeMessage::from_bytes(&ctx, b"From: \n\nhi") + .await + .unwrap(); + let contact = mimemsg.from.first().unwrap(); + assert_eq!(contact.addr, "g@c.de"); + assert_eq!(contact.display_name, None); + + let mimemsg = MimeMessage::from_bytes(&ctx, b"From: Goetz C \n\nhi") + .await + .unwrap(); + let contact = mimemsg.from.first().unwrap(); + assert_eq!(contact.addr, "g@c.de"); + assert_eq!(contact.display_name, Some("Goetz C".to_string())); + + let mimemsg = MimeMessage::from_bytes(&ctx, b"From: \"Goetz C\" \n\nhi") + .await + .unwrap(); + let contact = mimemsg.from.first().unwrap(); + assert_eq!(contact.addr, "g@c.de"); + assert_eq!(contact.display_name, Some("Goetz C".to_string())); + + let mimemsg = + MimeMessage::from_bytes(&ctx, b"From: =?utf-8?q?G=C3=B6tz?= C \n\nhi") + .await + .unwrap(); + let contact = mimemsg.from.first().unwrap(); + assert_eq!(contact.addr, "g@c.de"); + assert_eq!(contact.display_name, Some("Götz C".to_string())); + + let mimemsg = + MimeMessage::from_bytes(&ctx, b"From: \"=?utf-8?q?G=C3=B6tz?= C\" \n\nhi") + .await + .unwrap(); + let contact = mimemsg.from.first().unwrap(); + assert_eq!(contact.addr, "g@c.de"); + assert_eq!(contact.display_name, Some("Götz C".to_string())); + } + #[async_std::test] async fn test_dc_mimeparser_crash() { let context = TestContext::new().await;