mutt saves aliases with escaped quotes in the form of: alias dot \"Dot U. Sir\" <somebody@xxxxxxxxxxx> When we pass through our sanitize_address routine, we end up with double-escaping: To: "\\\"Dot U. Sir\\\" <somebody@xxxxxxxxxxx> Remove the escaping in mutt only for now, as I am not sure if other mailers can do this or if this is better fixed in sanitize_address. Cc: Remi Lespinet <remi.lespinet@xxxxxxxxxxxxxxxxxxxxxxx> Cc: Matthieu Moy <Matthieu.Moy@xxxxxxx> --- Cc-ing Remi and Matthieu since they might know better about fixing this in sanitize_address instead or if it's better being a one-off for mutt. git-send-email.perl | 10 ++++++++-- t/t9001-send-email.sh | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index c2abdaa..2d3f51e 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -524,8 +524,14 @@ my %parse_alias = ( if (/^\s*alias\s+(?:-group\s+\S+\s+)*(\S+)\s+(.*)$/) { my ($alias, $addr) = ($1, $2); $addr =~ s/#.*$//; # mutt allows # comments - # commas delimit multiple addresses - $aliases{$alias} = [ split_addrs($addr) ]; + # commas delimit multiple addresses + my @addr = split_addrs($addr); + + # quotes may be escaped in the file, + # remove them if paired so we do not + # double-escape them later. + s/^\\"(.*)\\"/"$1"/g foreach @addr; + $aliases{$alias} = \@addr }}}, mailrc => sub { my $fh = shift; while (<$fh>) { if (/^alias\s+(\S+)\s+(.*)$/) { diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 3c49536..834d91a 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -1527,6 +1527,21 @@ test_expect_success $PREREQ 'cccover adds Cc to all mail' ' test_cover_addresses "Cc" ' +test_expect_success $PREREQ 'escaped quotes in sendemail.aliasfiletype=mutt' ' + clean_fake_sendmail && + echo "alias sbd \\\"Dot U. Sir\\\" <somebody@xxxxxxxxxxx>" >.mutt && + git config --replace-all sendemail.aliasesfile "$(pwd)/.mutt" && + git config sendemail.aliasfiletype mutt && + git send-email \ + --from="Example <nobody@xxxxxxxxxxx>" \ + --to=sbd \ + --smtp-server="$(pwd)/fake.sendmail" \ + outdir/0001-*.patch \ + 2>errors >out && + grep "^!somebody@example\.org!$" commandline1 && + grep -F "To: \"Dot U. Sir\" <somebody@xxxxxxxxxxx>" out +' + test_expect_success $PREREQ 'sendemail.aliasfiletype=mailrc' ' clean_fake_sendmail && echo "alias sbd somebody@xxxxxxxxxxx" >.mailrc && -- EW -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html