]> git.kaiwu.me - njs.git/commitdiff
Fixed argument convertion to integer.
authorIgor Sysoev <igor@sysoev.ru>
Wed, 10 Feb 2016 16:18:28 +0000 (19:18 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 10 Feb 2016 16:18:28 +0000 (19:18 +0300)
njs/njs_vm.c
njs/test/njs_unit_test.c

index 9bd9d7dc56bd2af7f422b453d57c4bbe89a4e279..859d320a6fa53f1bece0dfdac5e626e9625c68ec 100644 (file)
@@ -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;
index 95bc59ec59502df6f2e2fb7d8585dd55e4e4a81c..6ec61334935778b6ee7610eee73c7bf35c9d38d0 100644 (file)
@@ -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") },