aboutsummaryrefslogtreecommitdiff
path: root/git-send-email.perl
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2008-03-28 17:29:01 -0400
committerJunio C Hamano <gitster@pobox.com>2008-05-21 13:05:10 -0700
commitd54eaaa268eb79a51ac11bfa8bbfb456c0b1a1fa (patch)
tree5951cb2f77b339bf1a210169bba114b007dd8416 /git-send-email.perl
parent0706bd19ef9b41e7519df2c73796ef93484272fd (diff)
downloadgit-d54eaaa268eb79a51ac11bfa8bbfb456c0b1a1fa.tar.gz
git-d54eaaa268eb79a51ac11bfa8bbfb456c0b1a1fa.tar.xz
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>
Diffstat (limited to 'git-send-email.perl')
-rwxr-xr-xgit-send-email.perl19
1 files changed, 17 insertions, 2 deletions
diff --git a/git-send-email.perl b/git-send-email.perl
index 71ba44d69..455a57059 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -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