aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPhilipp Stephani2020-06-29 12:32:56 +0200
committerPhilipp Stephani2020-06-29 12:32:56 +0200
commit59e768d64ad97782249fda9e53b6adc94c6d0130 (patch)
tree3221ba10b639751b10a067c1fab8017830ab46f2 /src
parentcce00bef0313bc42beee8096d9312313889dc92d (diff)
downloademacs-59e768d64ad97782249fda9e53b6adc94c6d0130.tar.gz
emacs-59e768d64ad97782249fda9e53b6adc94c6d0130.zip
Fix undefined behavior in json.c (Bug#42113)
* src/json.c (lisp_to_json_toplevel_1, Fjson_parse_string): Check whether input strings are actually strings. * test/src/json-tests.el (json-parse-string/wrong-type) (json-serialize/wrong-hash-key-type): New regression tests.
Diffstat (limited to 'src')
-rw-r--r--src/json.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/json.c b/src/json.c
index 2e50ce514fd..4648cb4c3b7 100644
--- a/src/json.c
+++ b/src/json.c
@@ -365,6 +365,7 @@ lisp_to_json_toplevel_1 (Lisp_Object lisp,
365 Lisp_Object key = HASH_KEY (h, i); 365 Lisp_Object key = HASH_KEY (h, i);
366 if (!EQ (key, Qunbound)) 366 if (!EQ (key, Qunbound))
367 { 367 {
368 CHECK_STRING (key);
368 Lisp_Object ekey = json_encode (key); 369 Lisp_Object ekey = json_encode (key);
369 /* We can't specify the length, so the string must be 370 /* We can't specify the length, so the string must be
370 NUL-terminated. */ 371 NUL-terminated. */
@@ -975,6 +976,7 @@ usage: (json-parse-string STRING &rest ARGS) */)
975#endif 976#endif
976 977
977 Lisp_Object string = args[0]; 978 Lisp_Object string = args[0];
979 CHECK_STRING (string);
978 Lisp_Object encoded = json_encode (string); 980 Lisp_Object encoded = json_encode (string);
979 check_string_without_embedded_nuls (encoded); 981 check_string_without_embedded_nuls (encoded);
980 struct json_configuration conf = 982 struct json_configuration conf =