Skip to content

Commit

Permalink
send-email: rfc2047-quote subject lines with non-ascii characters
Browse files Browse the repository at this point in the history
We always use 'utf-8' as the encoding, since we currently
have no way of getting the information from the user.

This also refactors the quoting of recipient names, since
both processes can share the rfc2047 quoting code.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed May 21, 2008
1 parent 0706bd1 commit d54eaaa
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
19 changes: 17 additions & 2 deletions git-send-email.perl
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,14 @@ sub expand_aliases {
if (!$in_body && /^MIME-Version:/i) {
$need_8bit_cte = 0;
}
if (!$in_body && /^Subject: ?(.*)/i) {
my $subject = $1;
$_ = "Subject: " .
($subject =~ /[^[:ascii:]]/ ?
quote_rfc2047($subject) :
$subject) .
"\n";
}
print C2 $_;
}
close(C);
Expand Down Expand Up @@ -624,6 +632,14 @@ sub unquote_rfc2047 {
return wantarray ? ($_, $encoding) : $_;
}

sub quote_rfc2047 {
local $_ = shift;
my $encoding = shift || 'utf-8';
s/([^-a-zA-Z0-9!*+\/])/sprintf("=%02X", ord($1))/eg;
s/(.*)/=\?$encoding\?q\?$1\?=/;
return $_;
}

# use the simplest quoting being able to handle the recipient
sub sanitize_address
{
Expand All @@ -641,8 +657,7 @@ sub sanitize_address

# rfc2047 is needed if a non-ascii char is included
if ($recipient_name =~ /[^[:ascii:]]/) {
$recipient_name =~ s/([^-a-zA-Z0-9!*+\/])/sprintf("=%02X", ord($1))/eg;
$recipient_name =~ s/(.*)/=\?utf-8\?q\?$1\?=/;
$recipient_name = quote_rfc2047($recipient_name);
}

# double quotes are needed if specials or CTLs are included
Expand Down
15 changes: 15 additions & 0 deletions t/t9001-send-email.sh
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,19 @@ test_expect_success '--compose respects user mime type' '
! grep "^Content-Type: text/plain; charset=utf-8" msgtxt1
'

test_expect_success '--compose adds MIME for utf8 subject' '
clean_fake_sendmail &&
echo y | \
GIT_EDITOR=$(pwd)/fake-editor \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject utf8-sübjëct \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server="$(pwd)/fake.sendmail" \
$patches &&
grep "^fake edit" msgtxt1 &&
grep "^Subject: =?utf-8?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1
'

test_done

0 comments on commit d54eaaa

Please sign in to comment.