* symbol.c (rb_check_id, rb_check_symbol): preserve encoding of
  the given name.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-07-07 03:49:14 +00:00
Родитель 135c75727d
Коммит c53464c7e9
3 изменённых файлов: 29 добавлений и 6 удалений

Просмотреть файл

@ -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;

Просмотреть файл

@ -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

Просмотреть файл

@ -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