Bug #18458
closedSegmentation fault when missing Warning#warn method
Description
If you remove the Warning#warn
method and call Kernel#warn
, you get a segmentation fault:
ruby 3.1.0:
$ ruby -e 'Warning.undef_method(:warn); warn ""' 2>&1 | head -2
<internal:warning>:51: [BUG] Segmentation fault at 0x0000000000000010
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-darwin21]
It's not new, you get the same with 3.0.3:
$ ruby -e 'Warning.undef_method(:warn); warn ""' 2>&1 | head -2
<internal:warning>:51: [BUG] Segmentation fault at 0x0000000000000010
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-darwin20]
In 2.7 though you get a NoMethodError exception:
$ ruby --disable-all -e 'Warning.undef_method(:warn); warn ""'
Traceback (most recent call last):
1: from -e:1:in `<main>'
<internal:warning>:43:in `warn': undefined method `warn' for Warning:Module (NoMethodError)
(I disabled gems because rubygems core extensions adds two lines of backtrace, but it's the same result in the end)
Updated by jeremyevans0 (Jeremy Evans) almost 3 years ago
Pull requested submitted to fix this: https://github.com/ruby/ruby/pull/5391
Updated by jeremyevans0 (Jeremy Evans) almost 3 years ago
- Backport changed from 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN to 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED, 3.1: REQUIRED
Updated by jeremyevans (Jeremy Evans) almost 3 years ago
- Status changed from Open to Closed
Applied in changeset git|9e0a91d0640600f2dfd7fc1d5fae6667019c9ca5.
Don't segfault if Warning.warn is undefined
Check that there is a method entry for the method before passing
it to rb_method_entry_arity.
Fixes [Bug #18458]
Updated by naruse (Yui NARUSE) almost 3 years ago
- Backport changed from 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED, 3.1: REQUIRED to 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED, 3.1: DONE
ruby_3_1 d3a2a3c5420fecfee54cbf3fbdd9287bc6c58f03 merged revision(s) 9e0a91d0640600f2dfd7fc1d5fae6667019c9ca5.
Updated by nagachika (Tomoyuki Chikanaga) almost 3 years ago
- Backport changed from 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED, 3.1: DONE to 2.6: DONTNEED, 2.7: DONTNEED, 3.0: DONE, 3.1: DONE
ruby_3_0 e18e6af604786be481115c7340c1450332615b57 merged revision(s) 9e0a91d0640600f2dfd7fc1d5fae6667019c9ca5.