From c5539de4da2e876407edd53918d16cbd6623fee1 Mon Sep 17 00:00:00 2001 From: link2xt Date: Sat, 30 Jan 2021 18:05:38 +0300 Subject: [PATCH] More robust In-Reply-To parsing Use `parse_message_id` on the header contents before using it. Database still stores the raw value. --- src/message.rs | 6 ++++-- src/mimeparser.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/message.rs b/src/message.rs index 01ddf7bad..dace3be95 100644 --- a/src/message.rs +++ b/src/message.rs @@ -27,7 +27,7 @@ use crate::events::EventType; use crate::job::{self, Action}; use crate::log::LogExt; use crate::lot::{Lot, LotState, Meaning}; -use crate::mimeparser::{FailureReport, SystemMessage}; +use crate::mimeparser::{parse_message_id, FailureReport, SystemMessage}; use crate::param::{Param, Params}; use crate::pgp::split_armored_data; use crate::stock_str; @@ -400,7 +400,9 @@ impl Message { let msg = Message { id: row.get("id")?, rfc724_mid: row.get::<_, String>("rfc724mid")?, - in_reply_to: row.get::<_, Option>("mime_in_reply_to")?, + in_reply_to: row + .get::<_, Option>("mime_in_reply_to")? + .and_then(|in_reply_to| parse_message_id(&in_reply_to).ok()), server_folder: row.get::<_, Option>("server_folder")?, server_uid: row.get("server_uid")?, chat_id: row.get("chat_id")?, diff --git a/src/mimeparser.rs b/src/mimeparser.rs index 4582157b9..e9cdd363a 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -2955,4 +2955,46 @@ On 2020-10-25, Bob wrote: Some("Mr.6Dx7ITn4w38.n9j7epIcuQI@outlook.com".to_string()) ); } + + #[async_std::test] + async fn test_long_in_reply_to() -> Result<()> { + let t = TestContext::new_alice().await; + + // A message with a long Message-ID. + // Long message-IDs are generated by Mailjet. + let raw = br###"Date: Thu, 28 Jan 2021 00:26:57 +0000 +Chat-Version: 1.0\n\ +Message-ID: +To: Bob +From: Alice +Subject: ... + +Some quote. +"###; + dc_receive_imf(&t, raw, "INBOX", 1, false).await?; + + // Delta Chat generates In-Reply-To with a starting tab when Message-ID is too long. + let raw = br###"In-Reply-To: + +Date: Thu, 28 Jan 2021 00:26:57 +0000 +Chat-Version: 1.0\n\ +Message-ID: +To: Alice +From: Bob +Subject: ... + +> Some quote. + +Some reply +"###; + + dc_receive_imf(&t, raw, "INBOX", 2, false).await?; + + let msg = t.get_last_msg().await; + assert_eq!(msg.get_text().unwrap(), "Some reply"); + let quoted_message = msg.quoted_message(&t).await?.unwrap(); + assert_eq!(quoted_message.get_text().unwrap(), "Some quote."); + + Ok(()) + } }