> On Sep 29, 2019, at 18:09, Floris Bruynooghe <f...@devork.be> wrote:
> 
> # HG changeset patch
> # User Floris Bruynooghe <f...@google.com>
> # Date 1569794518 -7200
> #      Mon Sep 30 00:01:58 2019 +0200
> # Node ID 01ba660965efded7d336ecf06270117bf98c6669
> # Parent  bbf77341a956b3ba40ae87538fcd200b34c5a3e5
> patchbomb: protect email addresses from shell
> 
> When patchbomb sends email via a sendmail-like program it invokes this
> using procutil.popen which passes the string to a shell to be parsed.
> To protect any special characters in the email addresses on the
> command line from being interpretered by the shell they must be
> quoted.
> 
> diff --git a/mercurial/mail.py b/mercurial/mail.py
> --- a/mercurial/mail.py
> +++ b/mercurial/mail.py
> @@ -152,7 +152,7 @@ def _smtp(ui):
> def _sendmail(ui, sender, recipients, msg):
>     '''send mail using sendmail.'''
>     program = ui.config('email', 'method')
> -    stremail = lambda x: stringutil.email(encoding.strtolocal(x))
> +    stremail = lambda x: '\'' + stringutil.email(encoding.strtolocal(x)) + 
> '\''

Whee. I suspect we should use shlex.quote() on the the string, rather than 
blindly inserting ' characters. You'll need to import it like this:

try:
    import shlex
    shellquote = shlex.quote
except (ImportError, AttributeError):
    import pipes
    shellquote = pipes.quote

because Python 2 doesn't have it in the usual module. Could I have you do a 
resend with that modification?

>     cmdline = '%s -f %s %s' % (program, stremail(sender),
>                                ' '.join(map(stremail, recipients)))
>     ui.note(_('sending mail: %s\n') % cmdline)
> diff --git a/tests/test-patchbomb.t b/tests/test-patchbomb.t
> --- a/tests/test-patchbomb.t
> +++ b/tests/test-patchbomb.t
> @@ -3033,7 +3033,7 @@ single rev
>   +d
> 
>   sending [PATCH] test ...
> -  sending mail: $TESTTMP/t2/pretendmail.sh -f test foo
> +  sending mail: $TESTTMP/t2/pretendmail.sh -f 'test' 'foo'
> 
> Test pull url header
> =================================
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to