Bug #14566 ยป fix-bug-14566.patch
eval_error.c | ||
---|---|---|
}
|
||
}
|
||
VALUE rb_call_message(VALUE recv)
|
||
{
|
||
return rb_funcall(recv, rb_intern("message"), 0);
|
||
}
|
||
void
|
||
rb_error_write(VALUE errinfo, VALUE errat, VALUE str, VALUE highlight, VALUE reverse)
|
||
{
|
||
... | ... | |
errat = Qnil;
|
||
}
|
||
if ((eclass = CLASS_OF(errinfo)) != Qundef) {
|
||
VALUE e = rb_check_funcall(errinfo, rb_intern("message"), 0, 0);
|
||
if (e != Qundef) {
|
||
if (!RB_TYPE_P(e, T_STRING)) e = rb_check_string_type(e);
|
||
emesg = e;
|
||
}
|
||
int state = 0;
|
||
VALUE e = rb_protect(rb_call_message, errinfo, &state);
|
||
if (state) rb_warning("Exception caught automatically in \"message\" method");
|
||
if (!RB_TYPE_P(e, T_STRING)) e = rb_check_string_type(e);
|
||
emesg = e;
|
||
}
|
||
if (NIL_P(reverse) || NIL_P(highlight)) {
|
||
VALUE tty = (VALUE)rb_stderr_tty_p();
|
test/ruby/test_exception.rb | ||
---|---|---|
assert_operator(message, :end_with?, top)
|
||
end
|
||
end
|
||
# def test_message_with_exception_wont_cause_infinite_loop
|
||
# bug14566 = '[Bug #14566]'
|
||
# assert_nothing_raised(Exception, bug14566) do
|
||
# eclass = Class.new(StandardError) do
|
||
# def message
|
||
# raise
|
||
# end
|
||
# end
|
||
# begin
|
||
# raise eclass
|
||
# rescue => e
|
||
# e.message
|
||
# end
|
||
# end
|
||
# end
|
||
end
|