Fix parsing Mailbox with spaces (#986)

This commit is contained in:
Arnaud de Bossoreille
2024-09-12 17:26:43 +02:00
committed by GitHub
parent 1c6a348eb8
commit e2ac5dadfb
2 changed files with 23 additions and 2 deletions

View File

@@ -170,7 +170,9 @@ fn phrase() -> impl Parser<char, Vec<char>, Error = Cheap<char>> {
// mailbox = name-addr / addr-spec // mailbox = name-addr / addr-spec
pub(crate) fn mailbox() -> impl Parser<char, (Option<String>, (String, String)), Error = Cheap<char>> pub(crate) fn mailbox() -> impl Parser<char, (Option<String>, (String, String)), Error = Cheap<char>>
{ {
choice((name_addr(), addr_spec().map(|addr| (None, addr)))).then_ignore(end()) choice((name_addr(), addr_spec().map(|addr| (None, addr))))
.padded()
.then_ignore(end())
} }
// name-addr = [display-name] angle-addr // name-addr = [display-name] angle-addr

View File

@@ -556,6 +556,14 @@ mod test {
); );
} }
#[test]
fn parse_address_only_trim() {
assert_eq!(
" kayo@example.com ".parse(),
Ok(Mailbox::new(None, "kayo@example.com".parse().unwrap()))
);
}
#[test] #[test]
fn parse_address_with_name() { fn parse_address_with_name() {
assert_eq!( assert_eq!(
@@ -567,6 +575,17 @@ mod test {
); );
} }
#[test]
fn parse_address_with_name_trim() {
assert_eq!(
" K. <kayo@example.com> ".parse(),
Ok(Mailbox::new(
Some("K.".into()),
"kayo@example.com".parse().unwrap()
))
);
}
#[test] #[test]
fn parse_address_with_empty_name() { fn parse_address_with_empty_name() {
assert_eq!( assert_eq!(
@@ -578,7 +597,7 @@ mod test {
#[test] #[test]
fn parse_address_with_empty_name_trim() { fn parse_address_with_empty_name_trim() {
assert_eq!( assert_eq!(
" <kayo@example.com>".parse(), " <kayo@example.com> ".parse(),
Ok(Mailbox::new(None, "kayo@example.com".parse().unwrap())) Ok(Mailbox::new(None, "kayo@example.com".parse().unwrap()))
); );
} }