]> git.kaiwu.me - njs.git/commitdiff
Fixed handling of Symbol values in JSON.stringify().
authorArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Fri, 22 Nov 2019 22:02:04 +0000 (01:02 +0300)
committerArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Fri, 22 Nov 2019 22:02:04 +0000 (01:02 +0300)
src/njs_json.c
src/test/njs_unit_test.c

index 2eeca86245551aa76d7fe55057454756490c956b..97886f8320884bf85fcb8e38994b23d60fcbc7be 100644 (file)
@@ -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:
index 657568428ad01446689df42712439cb6fd6cf875..c1e843e7fc8b4f65731b80fab79577ebba9e63a0 100644 (file)
@@ -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("{}") },