summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authordearblue <[email protected]>2020-05-09 21:10:15 +0900
committerdearblue <[email protected]>2020-05-09 21:12:31 +0900
commite2aecacaeb9a75f47fc42abb78a42f52da5a6b12 (patch)
tree12793663f8d3b173cebbb8692a3b0eb56ef10ee4 /mrbgems/mruby-compiler/core/codegen.c
parent8cdf6a87ed4d9d443a2f3289648a82c24a350cbf (diff)
downloadmruby-e2aecacaeb9a75f47fc42abb78a42f52da5a6b12.tar.gz
mruby-e2aecacaeb9a75f47fc42abb78a42f52da5a6b12.zip
Fix boundary check for `OP_LOADI16`; ref fa8668c
It was making a negative integer if the highest-order bit of a 16-bit integer was 1. no patched: ```ruby p 0x7fff # => 32767 p 0x8000 # => -32768 p 0xffff # => -1 p 0x10000 # => 65536 ```
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 162666eb9..88aac477f 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -2448,7 +2448,7 @@ codegen(codegen_scope *s, node *tree, int val)
}
else if (i < 8) genop_1(s, OP_LOADI_0 + (uint8_t)i, cursp());
else if (i <= 0xff) genop_2(s, OP_LOADI, cursp(), (uint16_t)i);
- else if (i <= 0xffff) genop_2S(s, OP_LOADI16, cursp(), (uint16_t)i);
+ else if (i <= 0x7fff) genop_2S(s, OP_LOADI16, cursp(), (uint16_t)i);
else {
int off;