send-email: sanitize author when writing From line

sender is now sanitized, but we didn't sanitize author when checking
whether From: line is needed in the message body.

As a result git started writing duplicate From: lines when author
matched sender and has utf8 characters.

Reported-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Tested-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Michael S. Tsirkin 2013-06-18 15:49:26 +03:00 committed by Junio C Hamano
parent f07075c297
commit 4cb46bddeb
2 changed files with 4 additions and 3 deletions

View File

@ -1258,6 +1258,7 @@ foreach my $t (@files) {
open my $fh, "<", $t or die "can't open file $t"; open my $fh, "<", $t or die "can't open file $t";


my $author = undef; my $author = undef;
my $sauthor = undef;
my $author_encoding; my $author_encoding;
my $has_content_type; my $has_content_type;
my $body_encoding; my $body_encoding;
@ -1296,7 +1297,7 @@ foreach my $t (@files) {
} }
elsif (/^From:\s+(.*)$/i) { elsif (/^From:\s+(.*)$/i) {
($author, $author_encoding) = unquote_rfc2047($1); ($author, $author_encoding) = unquote_rfc2047($1);
my $sauthor = sanitize_address($author); $sauthor = sanitize_address($author);
next if $suppress_cc{'author'}; next if $suppress_cc{'author'};
next if $suppress_cc{'self'} and $sauthor eq $sender; next if $suppress_cc{'self'} and $sauthor eq $sender;
printf("(mbox) Adding cc: %s from line '%s'\n", printf("(mbox) Adding cc: %s from line '%s'\n",
@ -1392,7 +1393,7 @@ foreach my $t (@files) {
$subject = quote_subject($subject, $auto_8bit_encoding); $subject = quote_subject($subject, $auto_8bit_encoding);
} }


if (defined $author and $author ne $sender) { if (defined $sauthor and $sauthor ne $sender) {
$message = "From: $author\n\n$message"; $message = "From: $author\n\n$message";
if (defined $author_encoding) { if (defined $author_encoding) {
if ($has_content_type) { if ($has_content_type) {

View File

@ -956,7 +956,7 @@ test_expect_success $PREREQ 'utf8 author is correctly passed on' '
grep "^From: Füñný Nâmé <odd_?=mail@example.com>" msgtxt1 grep "^From: Füñný Nâmé <odd_?=mail@example.com>" msgtxt1
' '


test_expect_failure $PREREQ 'utf8 sender is not duplicated' ' test_expect_success $PREREQ 'utf8 sender is not duplicated' '
clean_fake_sendmail && clean_fake_sendmail &&
test_commit weird_sender && test_commit weird_sender &&
test_when_finished "git reset --hard HEAD^" && test_when_finished "git reset --hard HEAD^" &&