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:
parent
f77d402352
commit
ddfcb96930
4
safe.c
4
safe.c
@ -90,8 +90,8 @@ rb_secure(int level)
|
|||||||
if (level <= rb_safe_level()) {
|
if (level <= rb_safe_level()) {
|
||||||
ID caller_name = rb_frame_callee();
|
ID caller_name = rb_frame_callee();
|
||||||
if (caller_name) {
|
if (caller_name) {
|
||||||
rb_raise(rb_eSecurityError, "Insecure operation `%s' at level %d",
|
rb_raise(rb_eSecurityError, "Insecure operation `%"PRIsVALUE"' at level %d",
|
||||||
rb_id2name(caller_name), rb_safe_level());
|
rb_id2str(caller_name), rb_safe_level());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rb_raise(rb_eSecurityError, "Insecure operation at level %d",
|
rb_raise(rb_eSecurityError, "Insecure operation at level %d",
|
||||||
|
@ -304,4 +304,21 @@ class TestDir < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
}
|
}
|
||||||
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
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user