changeset 163:c0aa3ecd2e83

An invalid value of Date object has been fixed.
author Igor Sysoev <igor@sysoev.ru>
date Wed, 31 Aug 2016 15:53:13 +0300
parents 47f4830c3d22
children 76f16f0ef6c5
files njs/njs_date.c njs/test/njs_unit_test.c
diffstat 2 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/njs/njs_date.c	Tue Aug 30 12:11:24 2016 +0300
+++ b/njs/njs_date.c	Wed Aug 31 15:53:13 2016 +0300
@@ -81,8 +81,8 @@
 njs_date_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     njs_index_t unused)
 {
-    double      num;
-    int64_t     time, values[8];
+    double      num, time;
+    int64_t     values[8];
     nxt_uint_t  i, n;
     njs_date_t  *date;
     struct tm   tm;
@@ -110,8 +110,8 @@
                 num = args[i].data.u.number;
 
                 if (njs_is_nan(num)) {
-                    nargs = 0;
-                    break;
+                    time = num;
+                    goto done;
                 }
 
                 values[i] = num;
@@ -138,6 +138,8 @@
             }
         }
 
+    done:
+
         date = nxt_mem_cache_alloc(vm->mem_cache_pool, sizeof(njs_date_t));
         if (nxt_slow_path(date == NULL)) {
             return NXT_ERROR;
--- a/njs/test/njs_unit_test.c	Tue Aug 30 12:11:24 2016 +0300
+++ b/njs/test/njs_unit_test.c	Wed Aug 31 15:53:13 2016 +0300
@@ -4465,6 +4465,9 @@
     { nxt_string("var o = Object.create(null); '__proto__' in o"),
       nxt_string("false") },
 
+    { nxt_string("var d = new Date(''); d +' '+ d.getTime()"),
+      nxt_string("Invalid Date NaN") },
+
     { nxt_string("var d = new Date(1308895200000); d.getTime()"),
       nxt_string("1308895200000") },