From: Junio C Hamano Date: Tue, 6 Jun 2006 07:05:56 +0000 (-0700) Subject: send-email: be more lenient and just catch obvious mistakes. X-Git-Tag: v1.4.1-rc1~35^2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/ad9c18f5045281ddd109c54451f1b4ebfb0d3567?ds=inline;hp=--cc send-email: be more lenient and just catch obvious mistakes. This cleans up the pattern matching subroutine by introducing two variables to hold regexp to approximately match local-part and domain in the e-mail address. It is meant to catch obvious mistakes with a cheap check. The patch also moves "scalar" to force Email::Valid->address() to work in !wantarray environment to extract_valid_address; earlier it was in the caller of the subroutine, which was way too error prone. Signed-off-by: Junio C Hamano --- ad9c18f5045281ddd109c54451f1b4ebfb0d3567 diff --git a/git-send-email.perl b/git-send-email.perl index a7a7797778..700d0c3e15 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -312,16 +312,18 @@ sub expand_aliases { sub extract_valid_address { my $address = shift; + my $local_part_regexp = '[^<>"\s@]+'; + my $domain_regexp = '[^.<>"\s@]+\.[^<>"\s@]+'; # check for a local address: - return $address if ($address =~ /^([\w\-.]+)$/); + return $address if ($address =~ /^($local_part_regexp)$/); if ($have_email_valid) { - return Email::Valid->address($address); + return scalar Email::Valid->address($address); } else { # less robust/correct than the monster regexp in Email::Valid, # but still does a 99% job, and one less dependency - $address =~ /([\w\-.]+@[\w\-.]+)/; + $address =~ /($local_part_regexp\@$domain_regexp)/; return $1; } } @@ -384,7 +386,7 @@ sub send_message defined $pid or die $!; if (!$pid) { exec($smtp_server,'-i', - map { scalar extract_valid_address($_) } + map { extract_valid_address($_) } @recipients) or die $!; } print $sm "$header\n$message";