From: Dmitry Volyntsev Date: Wed, 19 Sep 2018 16:24:05 +0000 (+0300) Subject: Fixed Array.prototype.length setter. X-Git-Tag: 0.2.5~23 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=de247463e9bfaea21b9a4f655e27a121528cd4ba;p=njs.git Fixed Array.prototype.length setter. --- diff --git a/njs/njs_array.c b/njs/njs_array.c index b1fac68b..d495aa95 100644 --- a/njs/njs_array.c +++ b/njs/njs_array.c @@ -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); diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index f883a82f..ada29e23 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -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") },