diff options
author | nagachika <nagachika@ruby-lang.org> | 2020-07-23 12:13:30 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2020-07-23 12:13:30 +0900 |
commit | 27fa1c61b78c1685ccf9ac203a95cfa9041d618f (patch) | |
tree | 88ce359e50f4789a7479753ea91ec1adbebf5b2b /eval_error.c | |
parent | 4be9bf1f67b997fc519625d56a93b8a68a70d124 (diff) |
merge revision(s) 579645d9f870fa4116dcd3200bbbb6e2c0b7f400: [Backport #17033]
Fixed infinite loop at error in printing cause [Bug #17033]
Diffstat (limited to 'eval_error.c')
-rw-r--r-- | eval_error.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/eval_error.c b/eval_error.c index 847072ab98..9d2de6dbc5 100644 --- a/eval_error.c +++ b/eval_error.c @@ -348,6 +348,7 @@ rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo) volatile uint8_t raised_flag = ec->raised_flag; volatile VALUE errat = Qundef; volatile VALUE emesg = Qundef; + volatile bool written = false; if (NIL_P(errinfo)) return; @@ -362,7 +363,10 @@ rb_ec_error_print(rb_execution_context_t * volatile ec, volatile VALUE errinfo) emesg = rb_get_message(errinfo); } - rb_error_write(errinfo, emesg, errat, Qnil, Qnil, Qnil); + if (!written) { + written = true; + rb_error_write(errinfo, emesg, errat, Qnil, Qnil, Qnil); + } EC_POP_TAG(); ec->errinfo = errinfo; |