From de247463e9bfaea21b9a4f655e27a121528cd4ba Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Wed, 19 Sep 2018 19:24:05 +0300 Subject: [PATCH] Fixed Array.prototype.length setter. --- njs/njs_array.c | 4 ++-- njs/test/njs_unit_test.c | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) 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") }, -- 2.47.3