]> git.eshelyaron.com Git - emacs.git/commitdiff
Only escape quotation mark, backslash and cntrl U+0000 to U+001F
authorDmitry Gutov <dgutov@yandex.ru>
Wed, 25 Mar 2015 19:54:29 +0000 (21:54 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Wed, 25 Mar 2015 19:54:29 +0000 (21:54 +0200)
* lisp/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.

lisp/ChangeLog
lisp/json.el
test/automated/json-tests.el

index 2d150ba3dd2d876ae8ce5732698724c1c293bdb8..56c2b4c6f98e500a6847a15eea70981397a96be6 100644 (file)
@@ -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):
index a1e9bb78d117a67aa8060f8cccbc83eeb96cf2ec..eaf8596a6dc8649e6e6e01a5a42c2751e77b856f 100644 (file)
@@ -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)
index 881c237261c6aee4fff60509e5118fbf1c3cfc67..fd89b7aa994e608006d570fa41d8e887e2258340 100644 (file)
@@ -35,8 +35,8 @@
 (ert-deftest json-encode-string-with-special-chars ()
   (should (equal (json-encode-string "a\n\fb")
                  "\"a\\n\\fb\""))
-  (should (equal (json-encode-string "\nasdфывfgh\t")
-                 "\"\\nasd\\u0444\\u044b\\u0432fgh\\t\"")))
+  (should (equal (json-encode-string "\nasdфыв\u001f\u007ffgh\t")
+                 "\"\\nasdфыв\\u001f\u007ffgh\\t\"")))
 
 (ert-deftest json-read-string-with-special-chars ()
   (should (equal (json-read-from-string "\"\\nasd\\u0444\\u044b\\u0432fgh\\t\"")