diff --git a/src/mimeparser.rs b/src/mimeparser.rs index fe7afe15a2..2590b518c7 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -422,23 +422,7 @@ impl MimeMessage { // Remove unsigned opportunistically protected headers from messages considered // Autocrypt-encrypted / displayed with padlock. // For "Subject" see . - for h in [ - HeaderDef::Subject, - HeaderDef::ChatGroupId, - HeaderDef::ChatGroupName, - HeaderDef::ChatGroupNameChanged, - HeaderDef::ChatGroupNameTimestamp, - HeaderDef::ChatGroupAvatar, - HeaderDef::ChatGroupMemberRemoved, - HeaderDef::ChatGroupMemberAdded, - HeaderDef::ChatGroupMemberTimestamps, - HeaderDef::ChatGroupPastMembers, - HeaderDef::ChatDelete, - HeaderDef::ChatEdit, - HeaderDef::ChatUserAvatar, - ] { - headers.remove(h.get_headername()); - } + headers.retain(|k, _| !(k.starts_with("chat-") || k == "subject")); } // let known protected headers from the decrypted diff --git a/src/mimeparser/mimeparser_tests.rs b/src/mimeparser/mimeparser_tests.rs index 19a3095f60..4ab8d211a5 100644 --- a/src/mimeparser/mimeparser_tests.rs +++ b/src/mimeparser/mimeparser_tests.rs @@ -1418,6 +1418,25 @@ async fn test_x_microsoft_original_message_id_precedence() -> Result<()> { Ok(()) } +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn test_extra_imf_chat_header() -> Result<()> { + let mut tcm = TestContextManager::new(); + let t = &tcm.alice().await; + let chat_id = t.get_self_chat().await.id; + + chat::send_text_msg(t, chat_id, "hi!".to_string()).await?; + let sent_msg = t.pop_sent_msg().await; + let payload = sent_msg + .payload + .replace("Message-ID:", "Chat-Forty-Two: 42\r\nMessage-ID:"); + let msg = MimeMessage::from_bytes(t, payload.as_bytes(), None) + .await + .unwrap(); + assert!(msg.headers.contains_key("chat-version")); + assert!(!msg.headers.contains_key("chat-forty-two")); + Ok(()) +} + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_long_in_reply_to() -> Result<()> { let t = TestContext::new_alice().await;