diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-04-16 12:46:07 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-04-16 12:46:07 +0000 |
commit | bdf16df33ae3eb9e6c513c29bcbb250dc8c9542b (patch) | |
tree | fca185e0af9d68afaed90a6633083f40813613b2 | |
parent | 2c1c5570e83ab6cc7f832cf0249e0c44cb2689e0 (diff) |
marshal.c: class name encoding
* marshal.c (w_object): preserve the encoding of the class name in
an error message, in the case of no _dump_data method.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50330 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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 |