diff options
-rw-r--r-- | marshal.c | 4 | ||||
-rw-r--r-- | test/ruby/test_marshal.rb | 7 |
2 files changed, 9 insertions, 2 deletions
@@ -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}<Time;undef _dump;self;end")} + assert_raise_with_message(TypeError, /T\u{23F0 23F3}/) { + Marshal.dump(c.new) + } + end end |