diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-23 10:00:43 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-23 11:13:27 +0900 |
| commit | 7e520838b3d7bb44db06d30834fba672cfc077f9 (patch) | |
| tree | b35ca48c325f9eac0d57574a3891fa68c51a7b8e /src | |
| parent | 44b4f69fcee7183cb8c762487ab91b01c70bcf50 (diff) | |
| download | mruby-7e520838b3d7bb44db06d30834fba672cfc077f9.tar.gz mruby-7e520838b3d7bb44db06d30834fba672cfc077f9.zip | |
Avoid infinite recursion in `method_missing`; ref #3908
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -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); |
