mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
vm_eval.c: preserve encoding
* vm_eval.c (rb_method_call_status): preserve encoding of called method name in error messages. * vm_insnhelper.c (vm_call_method): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ddfcb96930
commit
5d4aad2b1b
3 changed files with 16 additions and 3 deletions
|
@ -864,4 +864,17 @@ class TestMethod < Test::Unit::TestCase
|
|||
n = 10_000_000
|
||||
assert_equal n , rest_parameter(*(1..n)).size, '[Feature #10440]'
|
||||
end
|
||||
|
||||
def test_insecure_method
|
||||
m = "\u{5371 967a}"
|
||||
c = Class.new do
|
||||
proc {$SAFE=3;def foo;end}.call
|
||||
alias_method m, "foo"
|
||||
eval "def bar; #{m}; end"
|
||||
end
|
||||
obj = c.new
|
||||
assert_raise_with_message(SecurityError, /#{m}/) do
|
||||
obj.bar
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -583,8 +583,8 @@ rb_method_call_status(rb_thread_t *th, const rb_method_entry_t *me, call_type sc
|
|||
}
|
||||
|
||||
if (NOEX_SAFE(noex) > th->safe_level) {
|
||||
rb_raise(rb_eSecurityError, "calling insecure method: %s",
|
||||
rb_id2name(me->called_id));
|
||||
rb_raise(rb_eSecurityError, "calling insecure method: %"PRIsVALUE,
|
||||
rb_id2str(me->called_id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1779,7 +1779,7 @@ vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
|
|||
}
|
||||
}
|
||||
else if ((noex_safe = NOEX_SAFE(ci->me->flag)) > th->safe_level && (noex_safe > 2)) {
|
||||
rb_raise(rb_eSecurityError, "calling insecure method: %s", rb_id2name(ci->mid));
|
||||
rb_raise(rb_eSecurityError, "calling insecure method: %"PRIsVALUE, rb_id2str(ci->mid));
|
||||
}
|
||||
else {
|
||||
goto normal_method_dispatch;
|
||||
|
|
Loading…
Reference in a new issue