summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-12-23 10:00:43 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-12-23 11:13:27 +0900
commit7e520838b3d7bb44db06d30834fba672cfc077f9 (patch)
treeb35ca48c325f9eac0d57574a3891fa68c51a7b8e /src
parent44b4f69fcee7183cb8c762487ab91b01c70bcf50 (diff)
downloadmruby-7e520838b3d7bb44db06d30834fba672cfc077f9.tar.gz
mruby-7e520838b3d7bb44db06d30834fba672cfc077f9.zip
Avoid infinite recursion in `method_missing`; ref #3908
Diffstat (limited to 'src')
-rw-r--r--src/vm.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 99eb36183..1b92746cd 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1419,7 +1419,7 @@ RETRY_TRY_BLOCK:
if (MRB_METHOD_UNDEF_P(m)) {
mrb_sym missing = mrb_intern_lit(mrb, "method_missing");
m = mrb_method_search_vm(mrb, &c, missing);
- if (MRB_METHOD_UNDEF_P(m)) {
+ if (MRB_METHOD_UNDEF_P(m) || (missing == mrb->c->ci->mid && mrb_obj_eq(mrb, regs[0], recv))) {
mrb_value args = (argc < 0) ? regs[a+1] : mrb_ary_new_from_values(mrb, n, regs+a+1);
ERR_PC_SET(mrb, pc);
mrb_method_missing(mrb, mid, recv, args);