From f2c5146dc4e55db48310c62cef7cbcc9c2edc978 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 21 Feb 2017 14:51:22 +0000 Subject: [PATCH] object.c: message encoding * object.c (rb_obj_clone2): preserve encoding in error messages. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- object.c | 7 ++++--- test/ruby/test_object.rb | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/object.c b/object.c index 6f4b1239c8..c70ce4978e 100644 --- a/object.c +++ b/object.c @@ -354,14 +354,15 @@ rb_obj_clone2(int argc, VALUE *argv, VALUE obj) rb_get_kwargs(opt, keyword_ids, 0, 1, kwargs); kwfreeze = kwargs[0]; if (kwfreeze != Qundef && kwfreeze != Qtrue && kwfreeze != Qfalse) { - rb_raise(rb_eArgError, "unexpected value for freeze: %s", - rb_builtin_class_name(kwfreeze)); + rb_raise(rb_eArgError, "unexpected value for freeze: %"PRIsVALUE, + rb_obj_class(kwfreeze)); } } if (special_object_p(obj)) { if (kwfreeze == Qfalse) - rb_raise(rb_eArgError, "can't unfreeze %s", rb_obj_classname(obj)); + rb_raise(rb_eArgError, "can't unfreeze %"PRIsVALUE, + rb_obj_class(obj)); return obj; } clone = rb_obj_alloc(rb_obj_class(obj)); diff --git a/test/ruby/test_object.rb b/test/ruby/test_object.rb index 7c1b98f76e..d93d5594a7 100644 --- a/test/ruby/test_object.rb +++ b/test/ruby/test_object.rb @@ -61,6 +61,10 @@ class TestObject < Test::Unit::TestCase assert_raise(ArgumentError) {true.clone(freeze: false)} assert_raise(ArgumentError) {nil.clone(freeze: false)} assert_raise(ArgumentError) {false.clone(freeze: false)} + x = EnvUtil.labeled_class("\u{1f4a9}").new + assert_raise_with_message(ArgumentError, /\u{1f4a9}/) do + Object.new.clone(freeze: x) + end end def test_init_dupclone