diff options
| author | dearblue <[email protected]> | 2021-11-19 22:35:47 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2021-11-19 22:35:47 +0900 |
| commit | 279e0122da06c36f811dbd4380c20dd9ba157370 (patch) | |
| tree | 412fc5b057a1ab29980fe247e0de08f6b3ad16fb /src/vm.c | |
| parent | 1a1ff6b3ff410ce46c4978cb2ff58dc36868b916 (diff) | |
| download | mruby-279e0122da06c36f811dbd4380c20dd9ba157370.tar.gz mruby-279e0122da06c36f811dbd4380c20dd9ba157370.zip | |
Fixes keywords are lost with the `OP_SENDB`
If a splat argument was passed, it could write out of range on the VM stack.
```console
% bin/mruby -e 'def m(*args, **opts, &blk) p [args, opts, blk] end; m(*%w(X Y Z), r: 1, g: 2, b: 3) {}'
[["X", "Y", "Z"], {}, #<Proc:0x80077d7d0>]
```
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -1573,7 +1573,7 @@ RETRY_TRY_BLOCK: mrb_value recv; if (0 < nk && nk < 15) { /* pack keyword arguments */ - mrb_int kidx = a+n+1; + mrb_int kidx = a+(n==15?1:n)+1; mrb_value kdict = hash_new_from_values(mrb, nk, regs+kidx); regs[kidx] = kdict; nk = 15; |
