diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 7 | ||||
| -rw-r--r-- | lisp/json.el | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2d150ba3dd2..56c2b4c6f98 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2015-03-25 Dmitry Gutov <dgutov@yandex.ru> + + * json.el (json-special-chars): Don't treat `/' specially, there's + no need to. + (json-encode-string): Only escape quotation mark, backslash and + the control characters U+0000 to U+001F. + 2015-03-25 Artur Malabarba <bruce.connor.am@gmail.com> * emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine): diff --git a/lisp/json.el b/lisp/json.el index a1e9bb78d11..eaf8596a6dc 100644 --- a/lisp/json.el +++ b/lisp/json.el @@ -258,7 +258,6 @@ representation will be parsed correctly." (defvar json-special-chars '((?\" . ?\") (?\\ . ?\\) - (?/ . ?/) (?b . ?\b) (?f . ?\f) (?n . ?\n) @@ -313,8 +312,9 @@ representation will be parsed correctly." (let ((l (length string)) (start 0) res mb) - ;; Skip over ASCIIish printable characters. - (while (setq mb (string-match "[\"\\/\b\f\n\r\t]\\|[^ -~]" string start)) + ;; Only escape quotation mark, backslash and the control + ;; characters U+0000 to U+001F (RFC 4627, ECMA-404). + (while (setq mb (string-match "[\"\\[:cntrl:]]" string start)) (let* ((c (aref string mb)) (special (rassq c json-special-chars))) (push (substring string start mb) res) |
