[PATCH 1 of 3] encoding: escape U+007F (DEL) character in JSON
Yuya Nishihara
yuya at tcha.org
Sat Jan 16 12:33:53 UTC 2016
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1452936601 -32400
# Sat Jan 16 18:30:01 2016 +0900
# Node ID a3c68ee9fac119b70c0b515081f161fb708deca7
# Parent 0029c2bebc23182c34f83fa22abde1d5d4aebc51
encoding: escape U+007F (DEL) character in JSON
RFC 7159 does not state that U+007F must be escaped, but it is widely
considered a control character. As '\x7f' is invisible on a terminal, and
Python's json.dumps() escapes '\x7f', let's do the same.
diff --git a/mercurial/encoding.py b/mercurial/encoding.py
--- a/mercurial/encoding.py
+++ b/mercurial/encoding.py
@@ -395,8 +395,10 @@ def jsonescape(s):
>>> jsonescape('this is a test')
'this is a test'
- >>> jsonescape('escape characters: \\0 \\x0b \\t \\n \\r \\" \\\\')
- 'escape characters: \\\\u0000 \\\\u000b \\\\t \\\\n \\\\r \\\\" \\\\\\\\'
+ >>> jsonescape('escape characters: \\0 \\x0b \\x7f')
+ 'escape characters: \\\\u0000 \\\\u000b \\\\u007f'
+ >>> jsonescape('escape characters: \\t \\n \\r \\" \\\\')
+ 'escape characters: \\\\t \\\\n \\\\r \\\\" \\\\\\\\'
>>> jsonescape('a weird byte: \\xdd')
'a weird byte: \\xed\\xb3\\x9d'
>>> jsonescape('utf-8: caf\\xc3\\xa9')
@@ -411,6 +413,7 @@ def jsonescape(s):
for x in xrange(32, 256):
c = chr(x)
_jsonmap[c] = c
+ _jsonmap['\x7f'] = '\\u007f'
_jsonmap['\t'] = '\\t'
_jsonmap['\n'] = '\\n'
_jsonmap['\"'] = '\\"'
More information about the Mercurial-devel
mailing list