git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] send-email: rfc2047-quote subject lines with non-ascii characters

From
Junio C Hamano <gitster@pobox.com>
Date
May 21, 2008, 19:39 UTC
Message-ID
<7vve171m67.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<20080328212900.GB9656@coredump.intra.peff.net>

Last night I was going through old mail-logs and found this and another one that this is a follow-up to, which I think are still needed. Does anybody see anything wrong with them?

Jeff King <peff@peff.net> writes:
Show 82 quoted lines
> 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>
> ---
>  git-send-email.perl   |   19 +++++++++++++++++--
>  t/t9001-send-email.sh |   15 +++++++++++++++
>  2 files changed, 32 insertions(+), 2 deletions(-)
>
> diff --git a/git-send-email.perl b/git-send-email.perl
> index 7c4f06c..d0f9d4a 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -536,6 +536,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);
> @@ -626,6 +634,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
>  {
> @@ -643,8 +659,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
> diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
> index e222c49..a4bcd28 100755
> --- a/t/t9001-send-email.sh
> +++ b/t/t9001-send-email.sh
> @@ -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
> -- 
> 1.5.5.rc1.141.g50ecd.dirty
Previous: Jeff KingNext: Jeff King
Message 31 of 32 in “[ANNOUNCE] GIT 1.5.5-rc2”
  1. Junio C HamanoMar 28, 2008
  2. Jeff KingMar 28, 2008
  3. Junio C HamanoMar 28, 2008
  4. Jeff KingMar 28, 2008
  5. Jeff KingMar 28, 2008
  6. 1/2 send-email: specify content-type of --compose bodyJeff King, Mar 28, 2008
  7. 2/2 send-email: rfc2047-quote subject lines with non-ascii charactersJeff King, Mar 28, 2008
  8. Robin RosenbergMar 29, 2008
  9. Jeff KingMar 29, 2008
  10. Robin RosenbergMar 29, 2008
  11. Jeff KingMar 29, 2008
  12. Robin RosenbergMar 29, 2008
  13. Jeff KingMar 29, 2008
  14. Robin RosenbergMar 29, 2008
  15. Jeff KingMar 29, 2008
  16. Robin RosenbergMar 29, 2008
  17. Jeff KingMar 29, 2008
  18. Sam VilainMar 30, 2008
  19. Jeff KingMar 30, 2008
  20. Junio C HamanoMar 30, 2008
  21. Robin RosenbergMar 29, 2008
  22. Jeff KingMar 29, 2008
  23. Robin RosenbergMar 29, 2008
  24. Jeff KingMar 29, 2008
  25. Robin RosenbergMar 29, 2008
  26. Jeff KingMar 29, 2008
  27. Robin RosenbergMar 29, 2008
  28. Jeff KingMar 29, 2008
  29. Sam VilainMar 30, 2008
  30. Jeff KingMar 30, 2008
  31. Junio C HamanoMay 21, 2008
  32. Jeff KingMay 21, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.