[PATCH 3 of 7] dispatch: rework the serve --stdio safe argument checks

Yuya Nishihara yuya at tcha.org
Thu Jun 21 07:53:25 EDT 2018


On Wed, 20 Jun 2018 18:36:24 +0200, Paul Morelle wrote:
>> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1529489906 -7200
> #      Wed Jun 20 12:18:26 2018 +0200
> # Node ID 81edf3431b95d57257c690f7fe125c6676a78e18
> # Parent  b7051e4bf783c844f705473a2396458acecc59dc
> # EXP-Topic remote-debug
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 81edf3431b95
> dispatch: rework the serve --stdio safe argument checks
> 
> We prepare the code to check for arguments after the mandatory ones.
> 
> We want to relax this check to allow for wider argument passing in certain
> conditions (example --debug). We make preliminary refactoring in different
> changesets for clarity.
> 
> diff -r b7051e4bf783 -r 81edf3431b95 mercurial/dispatch.py
> --- a/mercurial/dispatch.py	Wed Jun 20 12:16:48 2018 +0200
> +++ b/mercurial/dispatch.py	Wed Jun 20 12:18:26 2018 +0200
> @@ -285,12 +285,15 @@
>              def unsafe():
>                  msg = _('potentially unsafe serve --stdio invocation: %s')
>                  raise error.Abort(msg % (stringutil.pprint(req.args),))
> -            if (len(req.args) != 4 or
> +            if (len(req.args) < 4 or
>                  req.args[0] != '-R' or
>                  req.args[1].startswith('--') or
>                  req.args[2] != 'serve' or
>                  req.args[3] != '--stdio'):
>                  unsafe()
> +            other_args = req.args[4:]
> +            if other_args:
> +                unsafe()

It's a bit scary to extend this just for debugging aids because argument
parsing at this phase has to be ad-hoc. Can't you instead use the
ssh/authorized_keys file to redirect a server session to 'hg debugserve'?

Alternatively, we could add a wrapper script like hg-ssh.


More information about the Mercurial-devel mailing list