summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-08-30 00:15:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-08-30 00:29:35 +0900
commit2c93e4a0a816d9c0d547a27b9f09fa61a2497d95 (patch)
tree0a7110a3220b8d6d42e11ae91dd2b4db93c6dfc1
parentf76cc483d55b58f2b5803b13cb5e528a67b39c3b (diff)
downloadmruby-2c93e4a0a816d9c0d547a27b9f09fa61a2497d95.tar.gz
mruby-2c93e4a0a816d9c0d547a27b9f09fa61a2497d95.zip
The operand of `OP_ARYDUP` may not be an array; fix #4094
This commit also fix #4096.
-rw-r--r--src/vm.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 2fd1e5efa..c8088d22e 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -2618,7 +2618,12 @@ RETRY_TRY_BLOCK:
CASE(OP_ARYDUP, B) {
mrb_value ary = regs[a];
- ary = mrb_ary_new_from_values(mrb, RARRAY_LEN(ary), RARRAY_PTR(ary));
+ if (mrb_array_p(ary)) {
+ ary = mrb_ary_new_from_values(mrb, RARRAY_LEN(ary), RARRAY_PTR(ary));
+ }
+ else {
+ ary = mrb_ary_new_from_values(mrb, 1, &ary);
+ }
regs[a] = ary;
NEXT;
}