diff --git a/ChangeLog b/ChangeLog index cf88c30aa2..addbbf30b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun May 4 14:29:14 2008 Tanaka Akira + + * eval.c (rb_obj_respond_to): check the result of respond_to? method + by RTEST. + Sun May 4 12:57:58 2008 Tanaka Akira * string.c (rb_str_each_line): return original string. diff --git a/eval.c b/eval.c index ab2c33dbcb..e5c8d47fe2 100644 --- a/eval.c +++ b/eval.c @@ -454,7 +454,7 @@ rb_obj_respond_to(VALUE obj, ID id, int priv) args[n++] = ID2SYM(id); if (priv) args[n++] = Qtrue; - return rb_funcall2(obj, respond_to, n, args); + return RTEST(rb_funcall2(obj, respond_to, n, args)); } } diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index c71be7d09d..70214c8ff5 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -1403,4 +1403,12 @@ class TestString < Test::Unit::TestCase s1 << 'a' } end + + def test_respond_to + o = Object.new + def o.respond_to?(arg) [:to_str].include?(arg) ? nil : super end + def o.to_str() "" end + def o.==(other) "" == other end + assert_equal(false, "" == o) + end end