From ad0eccf840f692694e63ec72c8496dc106e603ed Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Tue, 9 Jun 2020 16:30:55 -0700 Subject: Work around infinite loop when overriding method visibility in prepended module (#3201) For ZSUPER methods with no defined class for the method entry, start the next lookup at the superclass of the origin class of the method owner, instead of the superclass of the method owner. Fixes [Bug #16942] --- test/ruby/test_method.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'test/ruby') diff --git a/test/ruby/test_method.rb b/test/ruby/test_method.rb index 12f6f9aa27..43c6c6d44b 100644 --- a/test/ruby/test_method.rb +++ b/test/ruby/test_method.rb @@ -1181,6 +1181,27 @@ class TestMethod < Test::Unit::TestCase assert_separately [], "RubyVM::InstructionSequence.compile_option = {trace_instruction: false}\n" + body end + def test_zsuper_private_override_instance_method + assert_separately(%w(--disable-gems), <<-'end;', timeout: 30) + # Bug #16942 [ruby-core:98691] + module M + def x + end + end + + module M2 + prepend Module.new + include M + private :x + end + + ::Object.prepend(M2) + + m = Object.instance_method(:x) + assert_equal M, m.owner + end; + end + def test_eqq assert_operator(0.method(:<), :===, 5) assert_not_operator(0.method(:<), :===, -5) -- cgit v1.2.3