From: Artem S. Povalyukhin Date: Sat, 23 Nov 2019 09:52:06 +0000 (+0300) Subject: Pass unprintable values to JSON.stringify() replacer function. X-Git-Tag: 0.3.8~55 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=54e0d008f81d1642e216e2980cf9b655c5432434;p=njs.git Pass unprintable values to JSON.stringify() replacer function. This closes #257 issue on Github. --- diff --git a/src/njs_json.c b/src/njs_json.c index 97886f83..78ed12b4 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -1211,14 +1211,6 @@ njs_json_stringify_iterator(njs_vm_t *vm, njs_json_stringify_t *stringify, return ret; } - if (njs_is_undefined(value) - || njs_is_symbol(value) - || njs_is_function(value) - || !njs_is_valid(value)) - { - break; - } - ret = njs_json_stringify_to_json(stringify, state, key, value); if (njs_slow_path(ret != NJS_OK)) { return ret; @@ -1229,7 +1221,11 @@ njs_json_stringify_iterator(njs_vm_t *vm, njs_json_stringify_t *stringify, return ret; } - if (njs_is_undefined(value)) { + if (njs_is_undefined(value) + || njs_is_symbol(value) + || njs_is_function(value) + || !njs_is_valid(value)) + { break; } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index c1e843e7..32c8c45f 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -14562,6 +14562,10 @@ static njs_unit_test_t njs_test[] = "JSON.stringify(objs)"), njs_str("[{\"\":{\"a\":1}},{\"a\":1}]") }, + { njs_str("JSON.stringify({a: () => 1, b: Symbol(), c: undefined}," + "(k, v) => k.length ? String(v) : v)"), + njs_str("{\"a\":\"[object Function]\",\"b\":\"Symbol()\",\"c\":\"undefined\"}") }, + { njs_str("var a = []; a[0] = a; JSON.stringify(a)"), njs_str("TypeError: Nested too deep or a cyclic structure") },