From a384bcce350acf5e8be5d45f0258e6ef5bdeb033 Mon Sep 17 00:00:00 2001 From: Francois Chagnon Date: Thu, 17 Nov 2016 14:52:52 -0500 Subject: Fix instances where return value of mrb_method_search_vm is unchecked Reported by @charliesome --- test/t/nomethoderror.rb | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'test') diff --git a/test/t/nomethoderror.rb b/test/t/nomethoderror.rb index 5fed79689..ce3514782 100644 --- a/test/t/nomethoderror.rb +++ b/test/t/nomethoderror.rb @@ -20,3 +20,34 @@ assert('NoMethodError#args', '15.2.32.2.1') do end end end + +assert('Can still raise when BasicObject#method_missing is removed') do + assert_raise(TypeError) do + begin + BasicObject.alias_method(:old_method_missing, :method_missing) + BasicObject.remove_method(:method_missing) + 1.__send__(:foo) + ensure + BasicObject.alias_method(:method_missing, :old_method_missing) + BasicObject.remove_method(:old_method_missing) + end + end +end + +assert('Can still call super when BasicObject#method_missing is removed') do + assert_raise(TypeError) do + class A + def foo + super + end + end + begin + BasicObject.alias_method(:old_method_missing, :method_missing) + BasicObject.remove_method(:method_missing) + A.new.foo + ensure + BasicObject.alias_method(:method_missing, :old_method_missing) + BasicObject.remove_method(:old_method_missing) + end + end +end -- cgit v1.2.3 From 144006a20e7d97733d682ff1502f24b032b3db59 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 3 Dec 2016 18:23:04 +0900 Subject: update NoMethodError tests; ref #3291 --- test/t/nomethoderror.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/t/nomethoderror.rb b/test/t/nomethoderror.rb index ce3514782..1c09bc20e 100644 --- a/test/t/nomethoderror.rb +++ b/test/t/nomethoderror.rb @@ -22,7 +22,7 @@ assert('NoMethodError#args', '15.2.32.2.1') do end assert('Can still raise when BasicObject#method_missing is removed') do - assert_raise(TypeError) do + assert_raise(NoMethodError) do begin BasicObject.alias_method(:old_method_missing, :method_missing) BasicObject.remove_method(:method_missing) @@ -35,7 +35,7 @@ assert('Can still raise when BasicObject#method_missing is removed') do end assert('Can still call super when BasicObject#method_missing is removed') do - assert_raise(TypeError) do + assert_raise(NoMethodError) do class A def foo super -- cgit v1.2.3