]> git.kaiwu.me - njs.git/commitdiff
Fixed Array.prototype.length setter.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 19 Sep 2018 16:24:05 +0000 (19:24 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 19 Sep 2018 16:24:05 +0000 (19:24 +0300)
njs/njs_array.c
njs/test/njs_unit_test.c

index b1fac68b1398f04341e237594c5e9d5129ef573c..d495aa9562e06819d50782f24e2ce7f3786d0dd5 100644 (file)
@@ -377,7 +377,7 @@ njs_array_prototype_length(njs_vm_t *vm, njs_value_t *value,
     njs_value_t *setval, njs_value_t *retval)
 {
     double       num;
-    int32_t      size;
+    int64_t      size;
     uint32_t     length;
     njs_ret_t    ret;
     njs_value_t  *val;
@@ -399,7 +399,7 @@ njs_array_prototype_length(njs_vm_t *vm, njs_value_t *value,
             return NJS_ERROR;
         }
 
-        size = (int32_t) (length - array->length);
+        size = (int64_t) length - array->length;
 
         if (size > 0) {
             ret = njs_array_expand(vm, array, 0, size);
index f883a82f2af0494a1123d5ee054a4b9375f7154f..ada29e238389d5be88c8f70b945bb71d9a8014f9 100644 (file)
@@ -2790,9 +2790,15 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("[].length = {}"),
       nxt_string("RangeError: Invalid array length") },
 
+    { nxt_string("[].length = 2**32 - 1"),
+      nxt_string("MemoryError") },
+
     { nxt_string("[].length = 2**32"),
       nxt_string("RangeError: Invalid array length") },
 
+    { nxt_string("[].length = 2**32 + 1"),
+      nxt_string("RangeError: Invalid array length") },
+
     { nxt_string("[].length = -1"),
       nxt_string("RangeError: Invalid array length") },