diff options
-rw-r--r-- | error.c | 2 | ||||
-rw-r--r-- | test/ruby/test_name_error.rb | 13 |
2 files changed, 14 insertions, 1 deletions
@@ -1791,7 +1791,7 @@ name_err_mesg_to_str(VALUE obj) d = rb_protect(rb_inspect, obj, &state); if (state) rb_set_errinfo(Qnil); - if (NIL_P(d) || RSTRING_LEN(d) > 65) { + if (NIL_P(d)) { d = rb_any_to_s(obj); } singleton = (RSTRING_LEN(d) > 0 && RSTRING_PTR(d)[0] == '#'); diff --git a/test/ruby/test_name_error.rb b/test/ruby/test_name_error.rb index 102a4a67e8..ec03046c22 100644 --- a/test/ruby/test_name_error.rb +++ b/test/ruby/test_name_error.rb @@ -127,4 +127,17 @@ class TestNameError < Test::Unit::TestCase -> {require ARGV[0]}.call end; end + + def test_large_receiver_inspect + receiver = Class.new do + def self.inspect + 'A' * 120 + end + end + + error = assert_raise(NameError) do + receiver::FOO + end + assert_equal "uninitialized constant #{'A' * 120}::FOO", error.message + end end |