Skip to content
Permalink
Browse files

Fix SystemStackError when calling a method in an unused refinement

Fixes [Bug #15720]
  • Loading branch information...
jeremyevans committed Jun 10, 2019
1 parent 4f9e7c9 commit 5e018214e7435030727a97ac49db038d96438e74
Showing with 36 additions and 1 deletion.
  1. +32 −0 test/ruby/test_refinement.rb
  2. +4 −1 vm_insnhelper.c
@@ -2242,6 +2242,38 @@ def foo
INPUT
end

def test_call_method_in_unused_refinement
bug15720 = '[ruby-core:91916] [Bug #15720]'
assert_in_out_err([], <<-INPUT, ["ok"], [], bug15720)
module M1
refine Kernel do
def foo
'foo called!'
end
end
end
module M2
refine Kernel do
def bar
'bar called!'
end
end
end
using M1
foo
begin
bar
rescue NameError
end
puts "ok"
INPUT
end

def test_super_from_refined_module
a = EnvUtil.labeled_module("A") do
def foo;"[A#{super}]";end
@@ -2635,7 +2635,10 @@ vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, st
goto no_refinement_dispatch;
}
}
cc->me = ref_me;
if (cc->me->def->type != VM_METHOD_TYPE_REFINED ||
cc->me->def != ref_me->def) {
cc->me = ref_me;
}
if (ref_me->def->type != VM_METHOD_TYPE_REFINED) {
return vm_call_method(ec, cfp, calling, ci, cc);
}

0 comments on commit 5e01821

Please sign in to comment.
You can’t perform that action at this time.