From 8fcb8c3788e494dffdea467cdd56d33f77adba49 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sun, 6 Dec 2020 01:34:22 +0100 Subject: [PATCH] add failing test for erroneous apostrophed-encoding --- src/mimeparser.rs | 11 +++++++ .../attach_filename_apostrophed_invalid.eml | 30 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 test-data/message/attach_filename_apostrophed_invalid.eml diff --git a/src/mimeparser.rs b/src/mimeparser.rs index 624695fc3..5436d7a37 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -1604,6 +1604,17 @@ mod tests { assert_eq!(filename, Some("Auftragsbestätigung.pdf".to_string())) } + #[async_std::test] + async fn test_get_attachment_filename_apostrophed_invalid() { + let t = TestContext::new().await; + let mail = load_mail_with_attachment( + &t, + include_bytes!("../test-data/message/attach_filename_apostrophed_invalid.eml"), + ); + let filename = get_attachment_filename(&t.ctx, &mail.subparts[1]).unwrap(); + assert_eq!(filename, Some("somedäüta.html.zip".to_string())) + } + #[async_std::test] async fn test_get_attachment_filename_combined() { // test that if `filename` and `filename*0` are given, the filename is not doubled diff --git a/test-data/message/attach_filename_apostrophed_invalid.eml b/test-data/message/attach_filename_apostrophed_invalid.eml new file mode 100644 index 000000000..76b4f324c --- /dev/null +++ b/test-data/message/attach_filename_apostrophed_invalid.eml @@ -0,0 +1,30 @@ +Subject: Test apostrophed filenames +Message-ID: 12345@testrun.org +Date: Sat, 07 Dec 2019 19:00:27 +0000 +To: recp@testrun.org +From: sender@testrun.org +Content-Type: multipart/mixed; boundary="==BREAK==" + + +--==BREAK== +Content-Type: text/plain; charset=utf-8 + +this mail uses filename* in an invalid way, +not specifying chatset or language parts. + +see https://tools.ietf.org/html/rfc2231, section 4.: +"Note also that the single quote delimiters MUST be present +even when one of the field values is omitted." + +however, for now, Delta Chat is generous in this case, +just assuming encoded words + +--==BREAK== +Content-Type: text/html +Content-Disposition: attachment; + filename*="=?utf-8?Q?somed=C3=A4=C3=BCta.html.zip?=" +Content-Transfer-Encoding: base64 + +PGh0bWw+PGJvZHk+dGV4dDwvYm9keT5kYXRh + +--==BREAK==--