Skip to content

Commit 0ef5094

Browse files
authored
Fix runtime error: left shift of negative value (#4957)
This patch fixes #4701 JerryScript-DCO-1.0-Signed-off-by: Daniel Batiz [email protected]
1 parent ac1c48e commit 0ef5094

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

jerry-core/vm/opcodes-ecma-bitwise.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ do_number_bitwise_logic (number_bitwise_logic_op op, /**< number bitwise logic o
9393
}
9494
case NUMBER_BITWISE_SHIFT_LEFT:
9595
{
96-
result = (ecma_number_t) (ecma_number_to_int32 (left_number) << (right_uint32 & 0x1F));
96+
result = (ecma_number_t) ((int32_t) ((uint32_t) ecma_number_to_int32 (left_number) << (right_uint32 & 0x1F)));
9797
break;
9898
}
9999
case NUMBER_BITWISE_SHIFT_RIGHT:

tests/jerry/shift.js

+11
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,14 @@ assert((9 >> 2) === 2);
3131
assert((-14 >> 2) === -4);
3232

3333
assert((9 >>> 2) === (9 >> 2));
34+
35+
assert(("-1.234" << 0) == -1);
36+
assert(("-1.234" << -1) == -2147483648);
37+
assert((-1.2 << 0) === -1);
38+
assert((-1.1 << -1) === -2147483648);
39+
assert((-1.1 << -1.1) === -2147483648);
40+
assert((-1.1 << -999) === -33554432);
41+
assert((-1.1 << 999) === -128);
42+
assert((-33554431.0 << 0) === -33554431);
43+
assert((-33554431.0 << -1.1) === -2147483648);
44+
assert((-33554431.0 << -999) === 33554432);

0 commit comments

Comments
 (0)