]> git.kaiwu.me - njs.git/commitdiff
Fixed truth value of JSON numbers in JSON.parse().
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 11 Jun 2019 14:34:59 +0000 (17:34 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Tue, 11 Jun 2019 14:34:59 +0000 (17:34 +0300)
This closes #180 issue on Github.

njs/njs_json.c
njs/test/njs_unit_test.c

index 216c092311695e31039d5cc6de20cb1512363de3..be7569dc1b57be1e1a1f6b3e2369c6a08455debf 100644 (file)
@@ -876,8 +876,9 @@ njs_json_parse_number(njs_json_parse_ctx_t *ctx, njs_value_t *value,
     start = p;
     num = njs_number_dec_parse(&p, ctx->end);
     if (p != start) {
-        *value = njs_value_zero;
         value->data.u.number = sign * num;
+        value->type = NJS_NUMBER;
+        value->data.truth = njs_is_number_true(num);
 
         return p;
     }
index 327dac0daa4f023fbc52d92336c94e6bee5b03b5..d971214487dcf0f328471aaa0dd7121c55855de0 100644 (file)
@@ -11724,6 +11724,30 @@ static njs_unit_test_t  njs_test[] =
                  "o.b = 3; o.b"),
       nxt_string("3") },
 
+    { nxt_string("JSON.parse('2') || 10"),
+      nxt_string("2") },
+
+    { nxt_string("JSON.parse('0') || 10"),
+      nxt_string("10") },
+
+    { nxt_string("JSON.parse('-0') || 10"),
+      nxt_string("10") },
+
+    { nxt_string("JSON.parse('\"a\"') || 10"),
+      nxt_string("a") },
+
+    { nxt_string("JSON.parse('\"\"') || 10"),
+      nxt_string("10") },
+
+    { nxt_string("JSON.parse('true') || 10"),
+      nxt_string("true") },
+
+    { nxt_string("JSON.parse('false') || 10"),
+      nxt_string("10") },
+
+    { nxt_string("JSON.parse('null') || 10"),
+      nxt_string("10") },
+
     { nxt_string("var o = JSON.parse('{}', function(k, v) {return v;}); o"),
       nxt_string("[object Object]") },