зеркало из https://github.com/github/ruby.git
safe.c: preserve encoding
* safe.c (rb_secure): preserve encoding of the called method name in error messages. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
f77d402352
Коммит
ddfcb96930
4
safe.c
4
safe.c
|
@ -90,8 +90,8 @@ rb_secure(int level)
|
|||
if (level <= rb_safe_level()) {
|
||||
ID caller_name = rb_frame_callee();
|
||||
if (caller_name) {
|
||||
rb_raise(rb_eSecurityError, "Insecure operation `%s' at level %d",
|
||||
rb_id2name(caller_name), rb_safe_level());
|
||||
rb_raise(rb_eSecurityError, "Insecure operation `%"PRIsVALUE"' at level %d",
|
||||
rb_id2str(caller_name), rb_safe_level());
|
||||
}
|
||||
else {
|
||||
rb_raise(rb_eSecurityError, "Insecure operation at level %d",
|
||||
|
|
|
@ -304,4 +304,21 @@ class TestDir < Test::Unit::TestCase
|
|||
end
|
||||
}
|
||||
end
|
||||
|
||||
def test_insecure_chdir
|
||||
assert_raise(SecurityError) do
|
||||
proc do
|
||||
$SAFE=3
|
||||
Dir.chdir("/")
|
||||
end.call
|
||||
end
|
||||
m = "\u{79fb 52d5}"
|
||||
d = Class.new(Dir) {singleton_class.class_eval {alias_method m, :chdir}}
|
||||
assert_raise_with_message(SecurityError, /#{m}/) do
|
||||
proc do
|
||||
$SAFE=3
|
||||
d.__send__(m, "/")
|
||||
end.call
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче