diff --git a/src/mimeparser.rs b/src/mimeparser.rs index 8a90c3ae9..f6ec3b1ad 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -26,6 +26,7 @@ use crate::param::*; use crate::peerstate::Peerstate; use crate::simplify::*; use crate::stock::StockMessage; +use charset::Charset; use percent_encoding::percent_decode_str; /// A parsed MIME message. @@ -1291,7 +1292,7 @@ fn get_attachment_filename(mail: &mailparse::ParsedMail) -> Result Result c, + // encoded_words crate say, latin-1 is not reported; moreover, latin1 is a good default + None => Charset::for_label(b"latin1").unwrap(), + }; + let decoded_bytes = decoded_bytes.collect::>(); + let (utf8_str, _, _) = charset.decode(&*decoded_bytes); + Some(utf8_str.into()) + } + } else { + None + } } } } @@ -1564,6 +1578,13 @@ mod tests { assert_eq!(filename, Some("Maßnahmen Okt. 2020.html".to_string())) } + #[test] + fn test_charset_latin1() { + // make sure, latin1 exists under this name + // as we're using it as default in get_attachment_filename() for non-utf-8 + assert!(Charset::for_label(b"latin1").is_some()); + } + #[test] fn test_mailparse_content_type() { let ctype =