Welcome! Log In Create A New Profile

Advanced

[njs] Fixed handling of Symbol values in JSON.stringify().

Dmitry Volyntsev
November 23, 2019 06:30AM
details: https://hg.nginx.org/njs/rev/4367a0615234
branches:
changeset: 1253:4367a0615234
user: Artem S. Povalyukhin <artem.povaluhin@gmail.com>
date: Sat Nov 23 01:02:04 2019 +0300
description:
Fixed handling of Symbol values in JSON.stringify().

diffstat:

src/njs_json.c | 3 +++
src/test/njs_unit_test.c | 12 ++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)

diffs (63 lines):

diff -r 180b28e542b6 -r 4367a0615234 src/njs_json.c
--- a/src/njs_json.c Sat Nov 23 00:09:26 2019 +0300
+++ b/src/njs_json.c Sat Nov 23 01:02:04 2019 +0300
@@ -1128,6 +1128,7 @@ njs_json_pop_stringify_state(njs_json_st

#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
}

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

case NJS_UNDEFINED:
case NJS_NULL:
+ case NJS_SYMBOL:
case NJS_INVALID:
case NJS_FUNCTION:
default:
diff -r 180b28e542b6 -r 4367a0615234 src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Sat Nov 23 00:09:26 2019 +0300
+++ b/src/test/njs_unit_test.c Sat Nov 23 01:02:04 2019 +0300
@@ -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("{}") },

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Fixed handling of Symbol values in JSON.stringify().

Dmitry Volyntsev 299 November 23, 2019 06:30AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 118
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready