diff options
| author | dearblue <[email protected]> | 2020-05-09 21:10:15 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2020-05-09 21:12:31 +0900 |
| commit | e2aecacaeb9a75f47fc42abb78a42f52da5a6b12 (patch) | |
| tree | 12793663f8d3b173cebbb8692a3b0eb56ef10ee4 /mrbgems/mruby-compiler/core/codegen.c | |
| parent | 8cdf6a87ed4d9d443a2f3289648a82c24a350cbf (diff) | |
| download | mruby-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.c | 2 |
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; |
