summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/ruby/test_exception.rb1
-rw-r--r--test/ruby/test_integer.rb2
-rw-r--r--test/ruby/test_object.rb1
-rw-r--r--vm_method.c10
4 files changed, 11 insertions, 3 deletions
diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb
index 88b02293e8..3582cb3de3 100644
--- a/test/ruby/test_exception.rb
+++ b/test/ruby/test_exception.rb
@@ -1344,6 +1344,7 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status|
def test_super_in_method_missing
assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
begin;
+ $VERBOSE = nil
class Object
def method_missing(name, *args, &block)
super
diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb
index a991683773..a73992787d 100644
--- a/test/ruby/test_integer.rb
+++ b/test/ruby/test_integer.rb
@@ -188,7 +188,7 @@ class TestInteger < Test::Unit::TestCase
assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
begin;
- def method_missing(*);"";end
+ class Integer;def method_missing(*);"";end;end
assert_equal(0, Integer("0", 2))
end;
end
diff --git a/test/ruby/test_object.rb b/test/ruby/test_object.rb
index c25dcf9c37..28e07162d7 100644
--- a/test/ruby/test_object.rb
+++ b/test/ruby/test_object.rb
@@ -883,6 +883,7 @@ class TestObject < Test::Unit::TestCase
['ArgumentError.new("bug5473")', 'ArgumentError, "bug5473"', '"bug5473"'].each do |code|
exc = code[/\A[A-Z]\w+/] || 'RuntimeError'
assert_separately([], <<-SRC)
+ $VERBOSE = nil
class ::Object
def method_missing(m, *a, &b)
raise #{code}
diff --git a/vm_method.c b/vm_method.c
index 697621258c..ffe6f12166 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -605,8 +605,14 @@ rb_method_entry_make(VALUE klass, ID mid, VALUE defined_class, rb_method_visibil
rb_clear_method_cache_by_class(klass);
/* check mid */
- if (klass == rb_cObject && mid == idInitialize) {
- rb_warn("redefining Object#initialize may cause infinite loop");
+ if (klass == rb_cObject) {
+ switch (mid) {
+ case idInitialize:
+ case idRespond_to_missing:
+ case idMethodMissing:
+ case idRespond_to:
+ rb_warn("redefining Object#%s may cause infinite loop", rb_id2name(mid));
+ }
}
/* check mid */
if (mid == object_id || mid == id__send__) {