1
0
Fork 0
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:
nobu 2014-11-25 18:44:07 +00:00
parent ddfcb96930
commit 5d4aad2b1b
3 changed files with 16 additions and 3 deletions

View file

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

View file

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

View file

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