From a330104e9be4b29a463c876ec130b0aba836797a Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Sun, 22 Mar 2020 00:44:00 +0300 Subject: [PATCH 1/5] Add tests that crash normalize_name() --- src/contact.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/contact.rs b/src/contact.rs index 6b4780228..aa21d1bf6 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -1176,6 +1176,10 @@ mod tests { fn test_normalize_name() { assert_eq!(&normalize_name("Doe, John"), "John Doe"); assert_eq!(&normalize_name(" hello world "), "hello world"); + assert_eq!(&normalize_name("<"), "<"); + assert_eq!(&normalize_name(">"), ">"); + assert_eq!(&normalize_name("'"), "'"); + assert_eq!(&normalize_name("\""), "\""); } #[test] From a770d75e2e5fbc6a4b4adca2cf9208224041f291 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Sun, 22 Mar 2020 00:54:16 +0300 Subject: [PATCH 2/5] Fix condition in normalize_name() --- src/contact.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/contact.rs b/src/contact.rs index aa21d1bf6..bc1f3b45d 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -1067,7 +1067,7 @@ pub fn normalize_name(full_name: impl AsRef) -> String { } let len = full_name.len(); - if len > 0 { + if len > 1 { let firstchar = full_name.as_bytes()[0]; let lastchar = full_name.as_bytes()[len - 1]; if firstchar == b'\'' && lastchar == b'\'' From fe398de2fabf3ed378c9b8dc173f5720691a8386 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sun, 22 Mar 2020 12:07:07 +0100 Subject: [PATCH 3/5] add test that fail on checking existance of a Message-ID with angle brackets --- src/dc_receive_imf.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 16ddba483..b4cb083f3 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -1623,6 +1623,7 @@ fn dc_create_incoming_rfc724_mid( #[cfg(test)] mod tests { use super::*; + use crate::message::Message; use crate::test_utils::dummy_context; #[test] @@ -1682,4 +1683,38 @@ mod tests { Some("123-45-9@stub".into()) ); } + + #[test] + fn test_is_known_rfc724_mid() { + let t = dummy_context(); + let mut msg = Message::new(Viewtype::Text); + msg.text = Some("first message".to_string()); + let msg_id = chat::add_device_msg(&t.ctx, None, Some(&mut msg)).unwrap(); + let msg = Message::load_from_db(&t.ctx, msg_id).unwrap(); + + // Message-IDs may or may not be surrounded by angle brackets + assert!(is_known_rfc724_mid( + &t.ctx, + format!("<{}>", msg.rfc724_mid).as_str() + )); + assert!(is_known_rfc724_mid(&t.ctx, &msg.rfc724_mid)); + assert!(!is_known_rfc724_mid(&t.ctx, "unexistant@message.id")); + } + + #[test] + fn test_is_msgrmsg_rfc724_mid() { + let t = dummy_context(); + let mut msg = Message::new(Viewtype::Text); + msg.text = Some("first message".to_string()); + let msg_id = chat::add_device_msg(&t.ctx, None, Some(&mut msg)).unwrap(); + let msg = Message::load_from_db(&t.ctx, msg_id).unwrap(); + + // Message-IDs may or may not be surrounded by angle brackets + assert!(is_msgrmsg_rfc724_mid( + &t.ctx, + format!("<{}>", msg.rfc724_mid).as_str() + )); + assert!(is_msgrmsg_rfc724_mid(&t.ctx, &msg.rfc724_mid)); + assert!(!is_msgrmsg_rfc724_mid(&t.ctx, "unexistant@message.id")); + } } From 8f82bf40e0de7fb6e4bb86bfad8ab7b63e662963 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sun, 22 Mar 2020 12:20:14 +0100 Subject: [PATCH 4/5] let function that search for Message-IDs accept widly used square brackets format --- src/dc_receive_imf.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index b4cb083f3..a0ff8adea 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -1488,6 +1488,7 @@ fn is_known_rfc724_mid_in_list(context: &Context, mid_list: &str) -> bool { /// Check if a message is a reply to a known message (messenger or non-messenger). fn is_known_rfc724_mid(context: &Context, rfc724_mid: &str) -> bool { + let rfc724_mid = rfc724_mid.trim_start_matches('<').trim_end_matches('>'); context .sql .exists( @@ -1534,6 +1535,7 @@ pub(crate) fn is_msgrmsg_rfc724_mid_in_list(context: &Context, mid_list: &str) - /// Check if a message is a reply to any messenger message. fn is_msgrmsg_rfc724_mid(context: &Context, rfc724_mid: &str) -> bool { + let rfc724_mid = rfc724_mid.trim_start_matches('<').trim_end_matches('>'); context .sql .exists( From ae5a2396f3e9ba9c739d06d31560088ce2a10615 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sun, 22 Mar 2020 16:18:53 +0100 Subject: [PATCH 5/5] fix typo --- src/dc_receive_imf.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index a0ff8adea..f4ec776f2 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -1700,7 +1700,7 @@ mod tests { format!("<{}>", msg.rfc724_mid).as_str() )); assert!(is_known_rfc724_mid(&t.ctx, &msg.rfc724_mid)); - assert!(!is_known_rfc724_mid(&t.ctx, "unexistant@message.id")); + assert!(!is_known_rfc724_mid(&t.ctx, "nonexistant@message.id")); } #[test] @@ -1717,6 +1717,6 @@ mod tests { format!("<{}>", msg.rfc724_mid).as_str() )); assert!(is_msgrmsg_rfc724_mid(&t.ctx, &msg.rfc724_mid)); - assert!(!is_msgrmsg_rfc724_mid(&t.ctx, "unexistant@message.id")); + assert!(!is_msgrmsg_rfc724_mid(&t.ctx, "nonexistant@message.id")); } }