summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--error.c2
-rw-r--r--test/ruby/test_name_error.rb13
2 files changed, 14 insertions, 1 deletions
diff --git a/error.c b/error.c
index 09d5787ad5..4912869e43 100644
--- a/error.c
+++ b/error.c
@@ -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