summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--symbol.c10
-rw-r--r--test/-ext-/symbol/test_type.rb14
-rw-r--r--test/ruby/test_method.rb11
3 files changed, 29 insertions, 6 deletions
diff --git a/symbol.c b/symbol.c
index 63064d3b5f..9fbe3dda74 100644
--- a/symbol.c
+++ b/symbol.c
@@ -963,9 +963,8 @@ rb_check_id(volatile VALUE *namep)
else if (!RB_TYPE_P(name, T_STRING)) {
tmp = rb_check_string_type(name);
if (NIL_P(tmp)) {
- tmp = rb_inspect(name);
- rb_raise(rb_eTypeError, "%s is not a symbol nor a string",
- RSTRING_PTR(tmp));
+ rb_raise(rb_eTypeError, "%+"PRIsVALUE" is not a symbol nor a string",
+ name);
}
name = tmp;
*namep = name;
@@ -996,9 +995,8 @@ rb_check_symbol(volatile VALUE *namep)
else if (!RB_TYPE_P(name, T_STRING)) {
tmp = rb_check_string_type(name);
if (NIL_P(tmp)) {
- tmp = rb_inspect(name);
- rb_raise(rb_eTypeError, "%s is not a symbol nor a string",
- RSTRING_PTR(tmp));
+ rb_raise(rb_eTypeError, "%+"PRIsVALUE" is not a symbol nor a string",
+ name);
}
name = tmp;
*namep = name;
diff --git a/test/-ext-/symbol/test_type.rb b/test/-ext-/symbol/test_type.rb
index f1749f55da..3c21e61a18 100644
--- a/test/-ext-/symbol/test_type.rb
+++ b/test/-ext-/symbol/test_type.rb
@@ -120,5 +120,19 @@ module Test_Symbol
assert_symtype(Bug::Symbol.attrset("foo!="), :attrset?)
assert_equal(:"foo!=", Bug::Symbol.attrset(:foo!))
end
+
+ def test_check_id_invalid_type
+ cx = EnvUtil.labeled_class("X\u{1f431}")
+ assert_raise_with_message(TypeError, /X\u{1F431}/) {
+ Bug::Symbol.pinneddown?(cx)
+ }
+ end
+
+ def test_check_symbol_invalid_type
+ cx = EnvUtil.labeled_class("X\u{1f431}")
+ assert_raise_with_message(TypeError, /X\u{1F431}/) {
+ Bug::Symbol.find(cx)
+ }
+ end
end
end
diff --git a/test/ruby/test_method.rb b/test/ruby/test_method.rb
index 71d3b30dbf..ac92729f0a 100644
--- a/test/ruby/test_method.rb
+++ b/test/ruby/test_method.rb
@@ -251,6 +251,13 @@ class TestMethod < Test::Unit::TestCase
m = o.method(:bar).unbind
assert_raise(TypeError) { m.bind(Object.new) }
+ cx = EnvUtil.labeled_class("X\u{1f431}")
+ assert_raise_with_message(TypeError, /X\u{1f431}/) {
+ o.method(cx)
+ }
+ end
+
+ def test_bind_module_instance_method
feature4254 = '[ruby-core:34267]'
m = M.instance_method(:meth)
assert_equal(:meth, m.bind(Object.new).call, feature4254)
@@ -276,6 +283,10 @@ class TestMethod < Test::Unit::TestCase
assert_raise(TypeError) do
Class.new.class_eval { define_method(:bar, o.method(:bar)) }
end
+ cx = EnvUtil.labeled_class("X\u{1f431}")
+ assert_raise_with_message(TypeError, /X\u{1F431}/) {
+ Class.new {define_method(cx) {}}
+ }
end
def test_define_method_no_proc