From eff64ed9b0ddd298106326e169f91d9a4b6f7014 Mon Sep 17 00:00:00 2001 From: link2xt Date: Sat, 17 Jul 2021 22:07:03 +0300 Subject: [PATCH] Remove strict domain checks for EmailAddress::from_str They prevent "user@localhost" addresses from being parsed, which are useful for running online tests against local server. --- CHANGELOG.md | 1 + src/contact.rs | 13 +++++-------- src/dc_tools.rs | 32 ++++++++++++++------------------ 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a83e369e7..cc958d5cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ - Do not process names, avatars, location XMLs, message signature etc. for duplicate messages. #2513 - Fix `can_send` for users not in group #2479 +- Allow email addresses without dot in the domain part #2112 ## 1.56.0 diff --git a/src/contact.rs b/src/contact.rs index ba4791e2a..a021b80b5 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -1390,12 +1390,12 @@ mod tests { assert_eq!(may_be_valid_addr("user@domain.tld"), true); assert_eq!(may_be_valid_addr("uuu"), false); assert_eq!(may_be_valid_addr("dd.tt"), false); - assert_eq!(may_be_valid_addr("tt.dd@uu"), false); - assert_eq!(may_be_valid_addr("u@d"), false); - assert_eq!(may_be_valid_addr("u@d."), false); - assert_eq!(may_be_valid_addr("u@d.t"), false); + assert_eq!(may_be_valid_addr("tt.dd@uu"), true); + assert_eq!(may_be_valid_addr("u@d"), true); + assert_eq!(may_be_valid_addr("u@d."), true); + assert_eq!(may_be_valid_addr("u@d.t"), true); assert_eq!(may_be_valid_addr("u@d.tt"), true); - assert_eq!(may_be_valid_addr("u@.tt"), false); + assert_eq!(may_be_valid_addr("u@.tt"), true); assert_eq!(may_be_valid_addr("@d.tt"), false); assert_eq!(may_be_valid_addr(""), false); @@ -1839,9 +1839,6 @@ mod tests { assert!(Contact::create(&t, "", "dskjfdslk@sadklj.dk>") .await .is_err()); - assert!(Contact::create(&t, "", "dskjf@dslk@sadkljdk") - .await - .is_err()); assert!(Contact::create(&t, "", "dskjf dslk@d.e").await.is_err()); assert!(Contact::create(&t, "", " { - return err("invalid domain"); - } - Some(dot_idx) => { - if dot_idx >= domain.len() - 2 { - return err("invalid domain"); - } - } + if domain.is_empty() { + return err("missing domain after '@'"); } Ok(EmailAddress { local: (*local).to_string(), @@ -825,12 +814,19 @@ mod tests { domain: "domain.tld".into(), } ); + assert_eq!( + "user@localhost".parse::().unwrap(), + EmailAddress { + local: "user".into(), + domain: "localhost".into() + } + ); assert_eq!("uuu".parse::().is_ok(), false); assert_eq!("dd.tt".parse::().is_ok(), false); - assert_eq!("tt.dd@uu".parse::().is_ok(), false); - assert_eq!("u@d".parse::().is_ok(), false); - assert_eq!("u@d.".parse::().is_ok(), false); - assert_eq!("u@d.t".parse::().is_ok(), false); + assert!("tt.dd@uu".parse::().is_ok()); + assert!("u@d".parse::().is_ok()); + assert!("u@d.".parse::().is_ok()); + assert!("u@d.t".parse::().is_ok()); assert_eq!( "u@d.tt".parse::().unwrap(), EmailAddress { @@ -838,7 +834,7 @@ mod tests { domain: "d.tt".into(), } ); - assert_eq!("u@tt".parse::().is_ok(), false); + assert!("u@tt".parse::().is_ok()); assert_eq!("@d.tt".parse::().is_ok(), false); }