]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow NUL characters in JSON input
authorLars Ingebrigtsen <larsi@gnus.org>
Sat, 2 Jul 2022 13:06:24 +0000 (15:06 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 2 Jul 2022 13:06:24 +0000 (15:06 +0200)
* src/json.c (Fjson_parse_string, Fjson_parse_buffer): Allow NUL
characters in JSON (bug#48274).

src/json.c
test/src/json-tests.el

index 763f463aa4e52a0c2c645bb118cd27fa86f4a489..9a455f507b4578685b15fa8c6f95fa7c3defd03e 100644 (file)
@@ -975,7 +975,7 @@ usage: (json-parse-string STRING &rest ARGS) */)
 
   json_error_t error;
   json_t *object
-    = json_loads (SSDATA (encoded), JSON_DECODE_ANY, &error);
+    = json_loads (SSDATA (encoded), JSON_DECODE_ANY | JSON_ALLOW_NUL, &error);
   if (object == NULL)
     json_parse_error (&error);
 
@@ -1071,7 +1071,9 @@ usage: (json-parse-buffer &rest args) */)
   json_error_t error;
   json_t *object
     = json_load_callback (json_read_buffer_callback, &data,
-                          JSON_DECODE_ANY | JSON_DISABLE_EOF_CHECK,
+                          JSON_DECODE_ANY
+                         | JSON_DISABLE_EOF_CHECK
+                         | JSON_ALLOW_NUL,
                           &error);
 
   if (object == NULL)
index f3dfeea30b489614155d9c2ca667533873b108ff..3560e1abc963aedc1e7ffaa1a0b1d2ce2767caf6 100644 (file)
 (ert-deftest json-parse-string/null ()
   (skip-unless (fboundp 'json-parse-string))
   (should-error (json-parse-string "\x00") :type 'wrong-type-argument)
-  ;; FIXME: Reconsider whether this is the right behavior.
-  (should-error (json-parse-string "[\"a\\u0000b\"]") :type 'json-parse-error))
+  (should (json-parse-string "[\"a\\u0000b\"]"))
+  (let* ((string "{\"foo\":\"this is a string including a literal \\u0000\"}")
+         (data (json-parse-string string)))
+    (should (hash-table-p data))
+    (should (equal string (json-serialize data)))))
 
 (ert-deftest json-parse-string/invalid-unicode ()
   "Some examples from