diff -r bb04f96df51c -r 62e2e048d068 mercurial/wireproto.py --- a/mercurial/wireproto.py Sat Aug 06 13:46:28 2016 -0700 +++ b/mercurial/wireproto.py Sat Aug 06 13:55:21 2016 -0700 @@ -191,6 +191,11 @@ """Return a ``cmds`` argument value for the ``batch`` command.""" cmds = [] for op, argsdict in req: + # Old servers didn't properly unescape argument names. So prevent + # the sending of argument names that may not be decoded properly by + # servers. + assert all(escapearg(k) == k for k in argsdict) + args = ','.join('%s=%s' % (escapearg(k), escapearg(v)) for k, v in argsdict.iteritems()) cmds.append('%s %s' % (op, args)) @@ -620,7 +625,7 @@ for a in args.split(','): if a: n, v = a.split('=') - vals[n] = unescapearg(v) + vals[unescapearg(n)] = unescapearg(v) func, spec = commands[op] if spec: keys = spec.split()