Bug #14566
closed`raise` in `Exception#message` causes infinite loop
Description
This code does not stop.
class A < StandardError
def message
raise
end
end
raise A
The following code also does not stop.
class A < StandardError
def message
1/0
end
end
raise A
And they ignore CTRL-C, so I should do CTRL-Z (suspend) and kill -9
to stop them.
I confirmed the problem in Ruby 2.5 and trunk.
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
$ ruby -v
ruby 2.6.0dev (2018-03-01 trunk 62592) [x86_64-linux]
But Ruby 2.4 and 2.3 do not stop (I does not have Ruby 2.2 because I cannot build it in my environment.).
I can get same outputs between raise
and 1/0
in the message
method body.
$ ruby -v test.rb
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]
test.rb:7:in `<main>': A
$ ruby -v test.rb
ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-linux]
test.rb:7:in `<main>': A
Files
Updated by ujihisa (Tatsuhiro Ujihisa) over 6 years ago
- File fix-bug-14566.patch fix-bug-14566.patch added
I tried making a patch fixing this issue. See attached.
This patch makes the behaviour similar to the old Ruby, rescuing any exceptions in the "message" method, but also warns that an exception was automatically caught.
I'm not 100% sure if this is the solution that everyone wants. Also the test in the patch needs an update; I wasn't sure how to make sure if it's not causing infinite loop. I just left a draft as a comment there.
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
Thank you, I've missed the report mail.
I think it fatal.
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
- Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN to 2.3: DONTNEED, 2.4: DONTNEED, 2.5: REQUIRED
It should work as well as 2.4, not fatal
.
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r63133.
eval_error.c: fix loop on exception in message
-
error.c (rb_get_message): accessor to the message.
-
eval_error.c (rb_ec_error_print): handle exceptions on fetching
the message. [Bug #14566]
Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago
- Backport changed from 2.3: DONTNEED, 2.4: DONTNEED, 2.5: REQUIRED to 2.3: DONTNEED, 2.4: DONTNEED, 2.5: DONE
ruby_2_5 r64319 merged revision(s) 63133.