From 40db3d97ac03c8346fff14aa98340a68e79e85a5 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 19 Aug 2014 04:59:44 +0000 Subject: [PATCH] compar.c: preserve encodings * compar.c (rb_cmperr): preserve encodings of arguments in the message. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47220 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ compar.c | 11 +++++------ test/ruby/test_comparable.rb | 4 ++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index aea3500cb5..837062f7d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Aug 19 13:59:43 2014 Nobuyoshi Nakada + + * compar.c (rb_cmperr): preserve encodings of arguments in the + message. + Tue Aug 19 10:13:23 2014 Nobuyoshi Nakada * ext/thread/thread.c (get_array): check instance variables are diff --git a/compar.c b/compar.c index 893cde79fc..a38668edf1 100644 --- a/compar.c +++ b/compar.c @@ -18,17 +18,16 @@ static ID cmp; void rb_cmperr(VALUE x, VALUE y) { - const char *classname; + VALUE classname; if (SPECIAL_CONST_P(y)) { - y = rb_inspect(y); - classname = StringValuePtr(y); + classname = rb_inspect(y); } else { - classname = rb_obj_classname(y); + classname = rb_class_path(rb_obj_class(y)); } - rb_raise(rb_eArgError, "comparison of %s with %s failed", - rb_obj_classname(x), classname); + rb_raise(rb_eArgError, "comparison of %"PRIsVALUE" with %"PRIsVALUE" failed", + rb_class_path(rb_obj_class(x)), classname); } static VALUE diff --git a/test/ruby/test_comparable.rb b/test/ruby/test_comparable.rb index 05426af139..1c3cbeaf1a 100644 --- a/test/ruby/test_comparable.rb +++ b/test/ruby/test_comparable.rb @@ -73,6 +73,10 @@ class TestComparable < Test::Unit::TestCase def test_err assert_raise(ArgumentError) { 1.0 < nil } assert_raise(ArgumentError) { 1.0 < Object.new } + e = Module.new {break module_eval("class E\u{30a8 30e9 30fc}; self; end")} + assert_raise_with_message(ArgumentError, /E\u{30a8 30e9 30fc}/) { + 1.0 < e.new + } end def test_inversed_compare