зеркало из https://github.com/github/ruby.git
symbol.c: preserve encoding
* 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:
Родитель
135c75727d
Коммит
c53464c7e9
10
symbol.c
10
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;
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче