mirror of
https://github.com/git/git.git
synced 2024-11-28 04:23:30 +08:00
send-email: rfc2047-quote subject lines with non-ascii characters
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>
This commit is contained in:
parent
0706bd19ef
commit
d54eaaa268
@ -534,6 +534,14 @@ EOT
|
||||
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);
|
||||
@ -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
|
||||
{
|
||||
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user