Skip to content
Snippets Groups Projects
Commit 4fdc4adb authored by Augie Fackler's avatar Augie Fackler
Browse files

templatefilters: defend against evil unicode strs in json filter

We only want to do I/O in terms of bytes, so lets explode early
instead of recursing forever.

Differential Revision: https://phab.mercurial-scm.org/D1136
parent 537de0b1
Branches
Tags
No related merge requests found
......@@ -13,6 +13,7 @@
from . import (
encoding,
error,
hbisect,
node,
pycompat,
......@@ -233,6 +234,13 @@
return pycompat.bytestr(obj)
elif isinstance(obj, bytes):
return '"%s"' % encoding.jsonescape(obj, paranoid=paranoid)
elif isinstance(obj, str):
# This branch is unreachable on Python 2, because bytes == str
# and we'll return in the next-earlier block in the elif
# ladder. On Python 3, this helps us catch bugs before they
# hurt someone.
raise error.ProgrammingError(
'Mercurial only does output with bytes on Python 3: %r' % obj)
elif util.safehasattr(obj, 'keys'):
out = ['"%s": %s' % (encoding.jsonescape(k, paranoid=paranoid),
json(v, paranoid))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment