summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-09-05 21:11:41 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-09-05 21:11:41 +0900
commit7f4b57bb2029b52a3ef136588e06721b53b10bf8 (patch)
treefbeb2dbc6196f34aa4b1436d057356536e4dfad0 /mrbgems/mruby-compiler/core
parent3acaa44a70a44a816076dee65310f0f2487aeebd (diff)
downloadmruby-7f4b57bb2029b52a3ef136588e06721b53b10bf8.tar.gz
mruby-7f4b57bb2029b52a3ef136588e06721b53b10bf8.zip
Restrict `OP_EPOP` operand to `1`; ref #3789
Diffstat (limited to 'mrbgems/mruby-compiler/core')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 8f15a9b18..5bb0545c4 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -279,10 +279,20 @@ genop_peep(codegen_scope *s, mrb_code i, int val)
}
break;
case OP_EPOP:
+#if 1
+ if (GETARG_A(i) > 1) {
+ int j, len = GETARG_A(i), n;
+ for (j=0; j<len; j++) {
+ n = genop(s, MKOP_A(OP_EPOP, 1));
+ }
+ return n;
+ }
+#else
if (c0 == OP_EPOP) {
s->iseq[s->pc-1] = MKOP_A(OP_EPOP, GETARG_A(i0)+GETARG_A(i));
return 0;
}
+#endif
break;
case OP_POPERR:
if (c0 == OP_POPERR) {