Project

General

Profile

Actions

Bug #18458

closed

Segmentation fault when missing Warning#warn method

Added by etienne (Étienne Barrié) 11 months ago. Updated 9 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:106962]

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)

Actions #2

Updated by jeremyevans0 (Jeremy Evans) 11 months 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
Actions #3

Updated by jeremyevans (Jeremy Evans) 11 months 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) 10 months 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) 9 months 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0