Welcome! Log In Create A New Profile

Advanced

[njs] Fixed JSON.stringify() for objects inherited from Object prototype.

Dmitry Volyntsev
November 17, 2017 11:08AM
details: http://hg.nginx.org/njs/rev/a6af47aab3f2
branches:
changeset: 419:a6af47aab3f2
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Fri Nov 17 18:55:07 2017 +0300
description:
Fixed JSON.stringify() for objects inherited from Object prototype.

diffstat:

njs/njs_json.c | 12 +++++++-----
njs/test/njs_unit_test.c | 3 +++
2 files changed, 10 insertions(+), 5 deletions(-)

diffs (56 lines):

diff -r 06aadeb164a3 -r a6af47aab3f2 njs/njs_json.c
--- a/njs/njs_json.c Mon Oct 09 20:37:02 2017 +0300
+++ b/njs/njs_json.c Fri Nov 17 18:55:07 2017 +0300
@@ -1162,8 +1162,10 @@ njs_json_parse_exception(njs_json_parse_
}


-#define njs_is_object_or_array(value) \
- (((value)->type == NJS_OBJECT) || ((value)->type == NJS_ARRAY))
+#define njs_json_is_object(value) \
+ (((value)->type == NJS_OBJECT) \
+ || ((value)->type == NJS_ARRAY) \
+ || ((value)->type >= NJS_REGEXP))


#define njs_json_stringify_append(str, len) \
@@ -1280,7 +1282,7 @@ njs_json_stringify_continuation(njs_vm_t

njs_json_stringify_append_key(&prop->name);

- if (njs_is_object_or_array(&prop->value)) {
+ if (njs_json_is_object(&prop->value)) {
state = njs_json_push_stringify_state(vm, stringify,
&prop->value);
if (state == NULL) {
@@ -1371,7 +1373,7 @@ njs_json_stringify_continuation(njs_vm_t
return njs_json_stringify_replacer(vm, stringify, NULL, value);
}

- if (njs_is_object_or_array(value)) {
+ if (njs_json_is_object(value)) {
state = njs_json_push_stringify_state(vm, stringify, value);
if (state == NULL) {
return NXT_ERROR;
@@ -1397,7 +1399,7 @@ njs_json_stringify_continuation(njs_vm_t
case NJS_JSON_ARRAY_REPLACED:
state->type = NJS_JSON_ARRAY_CONTINUE;

- if (njs_is_object_or_array(&stringify->retval)) {
+ if (njs_json_is_object(&stringify->retval)) {
state = njs_json_push_stringify_state(vm, stringify,
&stringify->retval);
if (state == NULL) {
diff -r 06aadeb164a3 -r a6af47aab3f2 njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c Mon Oct 09 20:37:02 2017 +0300
+++ b/njs/test/njs_unit_test.c Fri Nov 17 18:55:07 2017 +0300
@@ -8199,6 +8199,9 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("JSON.stringify({a:{}, b:[function(v){}]})"),
nxt_string("{\"a\":{},\"b\":[null]}") },

+ { nxt_string("JSON.stringify(RegExp())"),
+ nxt_string("{}") },
+
/* Ignoring named properties of an array. */

{ nxt_string("var a = [1,2]; a.a = 1;"
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Fixed JSON.stringify() for objects inherited from Object prototype.

Dmitry Volyntsev 412 November 17, 2017 11:08AM



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

Online Users

Guests: 321
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