From bb386097189d84d9c5f992b16036e5abf555af73 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Wed, 10 Feb 2016 19:18:28 +0300 Subject: [PATCH] Fixed argument convertion to integer. --- njs/njs_vm.c | 13 +++++-------- njs/test/njs_unit_test.c | 6 ++++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/njs/njs_vm.c b/njs/njs_vm.c index 9bd9d7dc..859d320a 100644 --- a/njs/njs_vm.c +++ b/njs/njs_vm.c @@ -2383,19 +2383,16 @@ njs_normalize_args(njs_vm_t *vm, njs_value_t *args, uint8_t *args_types, if (njs_is_numeric(args)) { - /* Convert NaN and Infinities to integer. */ + /* Numbers are truncated to fit in 32-bit integers. */ if (njs_is_nan(args->data.u.number)) { args->data.u.number = 0; - } else if (njs_is_infinity(args->data.u.number)) { + } else if (args->data.u.number > 2147483647.0) { + args->data.u.number = 2147483647.0; - if (args->data.u.number > 0) { - args->data.u.number = 0x7fffffffffffffff; - - } else { - args->data.u.number = 0x8000000000000000; - } + } else if (args->data.u.number < -2147483648.0) { + args->data.u.number = -2147483648.0; } break; diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index 95bc59ec..6ec61334 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -2384,6 +2384,12 @@ static njs_unit_test_t njs_test[] = { nxt_string("'abcdefghijklmno'.slice(NaN, 5)"), nxt_string("abcde") }, + { nxt_string("'abcdefghijklmno'.slice(NaN, Infinity)"), + nxt_string("abcdefghijklmno") }, + + { nxt_string("'abcdefghijklmno'.slice(-Infinity, Infinity)"), + nxt_string("abcdefghijklmno") }, + { nxt_string("'abcdefghijklmno'.slice('0', '5')"), nxt_string("abcde") }, -- 2.47.3