]> git.ipfire.org Git - thirdparty/git.git/commitdiff
git-send-email: use sanitized address when reading mbox body
authorCsókás, Bence <csokas.bence@prolan.hu>
Mon, 1 Jul 2024 09:01:16 +0000 (11:01 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 1 Jul 2024 18:38:29 +0000 (11:38 -0700)
Addresses that are mentioned on the trailers in the commit log
messages (e.g., "Reviewed-by") are added to the "Cc:" list by "git
send-email".  These hand-written addresses, however, may be
malformed (e.g., having unquoted "." and other punctutation marks in
the display-name part) and can upset MTA.

The code does use the sanitize_address() helper on these
address-looking strings to turn them into valid addresses, but it is
used only to see if the address should be suppressed.  The original
string taken from the message is added to the @cc list if the code
decides the address is not suppressed.

Because the addresses on trailer lines are hand-written and more
likely to contain malformed addresses, when adding to the @cc list,
use the result from sanitize_address, not the original.  Note that
we do not modify the behaviour for addresses taken from the e-mail
headers, as they are more likely to be machine generated and
well-formed.

Signed-off-by: Csókás, Bence <csokas.bence@prolan.hu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-send-email.perl
t/t9001-send-email.sh

index 821b2b3a135ab6f4ab0085ac6acbea1d4eb1c320..c351bb0d98ccba4713eaedab3bbb3918272a54e4 100755 (executable)
@@ -1844,9 +1844,9 @@ sub pre_process_file {
                                        $what, $_) unless $quiet;
                                next;
                        }
-                       push @cc, $c;
+                       push @cc, $sc;
                        printf(__("(body) Adding cc: %s from line '%s'\n"),
-                               $c, $_) unless $quiet;
+                               $sc, $_) unless $quiet;
                }
        }
        close $fh;
index 5a771000c9ca0de56bf21e4d8212a6581727b189..4d7e61af6f3c3279e665b8a3e1bf09cc7154f438 100755 (executable)
@@ -1299,6 +1299,49 @@ test_expect_success $PREREQ 'utf8 sender is not duplicated' '
        test_line_count = 1 msgfrom
 '
 
+test_expect_success $PREREQ 'setup expect for cc list' "
+cat >expected-cc <<\EOF
+!recipient@example.com!
+!author@example.com!
+!one@example.com!
+!os@example.com!
+!odd_?=mail@example.com!
+!doug@example.com!
+!codev@example.com!
+!thor.au@example.com!
+EOF
+"
+
+test_expect_success $PREREQ 'cc list is sanitized' '
+       clean_fake_sendmail &&
+       test_commit weird_cc_body &&
+       test_when_finished "git reset --hard HEAD^" &&
+       git commit --amend -F - <<-EOF &&
+       Test Cc: sanitization.
+
+       Cc: Person, One <one@example.com>
+       Cc: Ronnie O${SQ}Sullivan <os@example.com>
+       Reviewed-by: Füñný Nâmé <odd_?=mail@example.com>
+       Reported-by: bugger on Jira
+       Reported-by: Douglas Reporter <doug@example.com> [from Jira profile]
+       BugID: 12345
+       Co-developed-by: "C. O. Developer" <codev@example.com>
+       Signed-off-by: A. U. Thor <thor.au@example.com>
+       EOF
+       git send-email -1 --to=recipient@example.com \
+               --smtp-server="$(pwd)/fake.sendmail" >actual-show-all-headers &&
+       test_cmp expected-cc commandline1 &&
+       test_grep "^(body) Adding cc: \"Person, One\" <one@example.com>" actual-show-all-headers &&
+       test_grep "^(body) Adding cc: Ronnie O${SQ}Sullivan <os@example.com>" actual-show-all-headers &&
+       test_grep "^(body) Adding cc: =?UTF-8?q?F=C3=BC=C3=B1n=C3=BD=20N=C3=A2m=C3=A9?="\
+" <odd_?=mail@example.com>" actual-show-all-headers &&
+       test_grep "^(body) Ignoring Reported-by .* bugger on Jira" actual-show-all-headers &&
+       test_grep "^(body) Adding cc: Douglas Reporter <doug@example.com>" actual-show-all-headers &&
+       test_grep ! "12345" actual-show-all-headers &&
+       test_grep "^(body) Adding cc: \"C. O. Developer\" <codev@example.com>" actual-show-all-headers &&
+       test_grep "^(body) Adding cc: \"A. U. Thor\" <thor.au@example.com>" actual-show-all-headers
+'
+
 test_expect_success $PREREQ 'sendemail.composeencoding works' '
        clean_fake_sendmail &&
        git config sendemail.composeencoding iso-8859-1 &&