diff options
author | Matthieu Moy <Matthieu.Moy@imag.fr> | 2016-10-13 07:47:27 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-10-14 10:06:09 -0700 |
commit | e3fdbcc8e16474f50749a384175f78908c4f038e (patch) | |
tree | 9091e11db7d4c5ba0b8440bb1c18cb2875560a7e /perl | |
parent | fa5b1aa9a1e1f0ad7b2728bec3712d3fab5fe734 (diff) | |
download | git-e3fdbcc8e16474f50749a384175f78908c4f038e.tar.gz git-e3fdbcc8e16474f50749a384175f78908c4f038e.tar.xz |
parse_mailboxes: accept extra text after <...> address
The test introduced in this commit succeeds without the patch to Git.pm
if Mail::Address is installed, but fails otherwise because our in-house
parser does not accept any text after the email address. They succeed
both with and without Mail::Address after this commit.
Mail::Address accepts extra text and considers it as part of the name,
iff the address is surrounded with <...>. The implementation mimics
this behavior as closely as possible.
This mostly restores the behavior we had before b1c8a11 (send-email:
allow multiple emails using --cc, --to and --bcc, 2015-06-30), but we
keep the possibility to handle comma-separated lists.
Reported-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'perl')
-rw-r--r-- | perl/Git.pm | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/perl/Git.pm b/perl/Git.pm index 19ef08110..42e0895ef 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -878,6 +878,7 @@ sub parse_mailboxes { # divide the string in tokens of the above form my $re_token = qr/(?:$re_quote|$re_word|$re_comment|\S)/; my @tokens = map { $_ =~ /\s*($re_token)\s*/g } @_; + my $end_of_addr_seen = 0; # add a delimiter to simplify treatment for the last mailbox push @tokens, ","; @@ -887,10 +888,10 @@ sub parse_mailboxes { if ($token =~ /^[,;]$/) { # if buffer still contains undeterminated strings # append it at the end of @address or @phrase - if (@address) { - push @address, @buffer; - } else { + if ($end_of_addr_seen) { push @phrase, @buffer; + } else { + push @address, @buffer; } my $str_phrase = join ' ', @phrase; @@ -914,16 +915,16 @@ sub parse_mailboxes { push @addr_list, $str_mailbox if ($str_mailbox); @phrase = @address = @comment = @buffer = (); + $end_of_addr_seen = 0; } elsif ($token =~ /^\(/) { push @comment, $token; } elsif ($token eq "<") { push @phrase, (splice @address), (splice @buffer); } elsif ($token eq ">") { + $end_of_addr_seen = 1; push @address, (splice @buffer); - } elsif ($token eq "@") { + } elsif ($token eq "@" && !$end_of_addr_seen) { push @address, (splice @buffer), "@"; - } elsif ($token eq ".") { - push @address, (splice @buffer), "."; } else { push @buffer, $token; } |