From: Artem S. Povalyukhin Date: Fri, 22 Nov 2019 22:02:04 +0000 (+0300) Subject: Fixed handling of Symbol values in JSON.stringify(). X-Git-Tag: 0.3.8~56 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=599a69adec608b0c6aceec128e1ea70bc12e8f36;p=njs.git Fixed handling of Symbol values in JSON.stringify(). --- diff --git a/src/njs_json.c b/src/njs_json.c index 2eeca862..97886f83 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -1128,6 +1128,7 @@ njs_json_pop_stringify_state(njs_json_stringify_t *stringify) #define njs_json_is_object(value) \ (((value)->type == NJS_OBJECT) \ + || ((value)->type == NJS_OBJECT_SYMBOL) \ || ((value)->type == NJS_ARRAY) \ || ((value)->type >= NJS_REGEXP)) @@ -1211,6 +1212,7 @@ njs_json_stringify_iterator(njs_vm_t *vm, njs_json_stringify_t *stringify, } if (njs_is_undefined(value) + || njs_is_symbol(value) || njs_is_function(value) || !njs_is_valid(value)) { @@ -1559,6 +1561,7 @@ njs_json_append_value(njs_json_stringify_t *stringify, const njs_value_t *value) case NJS_UNDEFINED: case NJS_NULL: + case NJS_SYMBOL: case NJS_INVALID: case NJS_FUNCTION: default: diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 65756842..c1e843e7 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -14264,6 +14264,9 @@ static njs_unit_test_t njs_test[] = { njs_str("JSON.stringify(undefined)"), njs_str("undefined") }, + { njs_str("JSON.stringify(Symbol())"), + njs_str("undefined") }, + { njs_str("JSON.stringify({})"), njs_str("{}") }, @@ -14279,6 +14282,9 @@ static njs_unit_test_t njs_test[] = { njs_str("JSON.stringify({a:1, b:undefined})"), njs_str("{\"a\":1}") }, + { njs_str("JSON.stringify({a:1, b:Symbol()})"), + njs_str("{\"a\":1}") }, + { njs_str("var o = {a:1, c:2};" "Object.defineProperty(o, 'b', {enumerable:false, value:3});" "JSON.stringify(o)"), @@ -14290,6 +14296,12 @@ static njs_unit_test_t njs_test[] = { njs_str("JSON.stringify(RegExp())"), njs_str("{}") }, + { njs_str("JSON.stringify(Object(Symbol()))"), + njs_str("{}") }, + + { njs_str("var s = Object(Symbol()); s.test = 'test'; JSON.stringify(s)"), + njs_str("{\"test\":\"test\"}") }, + { njs_str("JSON.stringify(SyntaxError('e'))"), njs_str("{}") },