diff --git a/marshal.c b/marshal.c index b38c53c05c..958778377d 100644 --- a/marshal.c +++ b/marshal.c @@ -893,8 +893,8 @@ w_object(VALUE obj, struct dump_arg *arg, int limit) if (!rb_obj_respond_to(obj, s_dump_data, TRUE)) { rb_raise(rb_eTypeError, - "no _dump_data is defined for class %s", - rb_obj_classname(obj)); + "no _dump_data is defined for class %"PRIsVALUE, + rb_obj_class(obj)); } v = rb_funcall2(obj, s_dump_data, 0, 0); check_dump_arg(arg, s_dump_data); diff --git a/test/ruby/test_marshal.rb b/test/ruby/test_marshal.rb index c8d79edb02..115c6bcc5b 100644 --- a/test/ruby/test_marshal.rb +++ b/test/ruby/test_marshal.rb @@ -654,4 +654,11 @@ class TestMarshal < Test::Unit::TestCase Marshal.dump(c.new(0, autoclose: false)) } end + + def test_undumpable_data + c = Module.new {break module_eval("class T\u{23F0 23F3}