Project

General

Profile

Actions

Bug #18329

closed

Calling super to non-existent method dumps core

Added by lewispb (Lewis Buckley) 3 months ago. Updated 2 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 3.1.0preview1 (2021-11-09 master 5a3b2e6141) [x86_64-linux]
[ruby-core:106019]

Description

The following code runs on Ruby 2.7.4 and doesn't produce a core dump. On Ruby 3.0.0, 3.0.2 and 3.1.0-preview 1 the following code produces a core dump:

# example2.rb

module Probes
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def probe(*methods)
      prepend(probing_module(methods))
    end

    def probing_module(methods)
      Module.new do
        methods.each do |method|
          define_method(method) do |*args, **kwargs, &block|
            super(*args, **kwargs, &block)
          end
        end
      end
    end
  end
end

class Probed
  include Probes

  probe :danger!, :missing

  def danger!
    raise "BOOM"
  end
end

5.times do
  subject = Probed.new
  subject.danger! rescue RuntimeError
  subject.missing rescue NoMethodError
end
example2.rb:15: [BUG] Segmentation fault at 0x0000000000000000
ruby 3.1.0preview1 (2021-11-09 master 5a3b2e6141) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0005 p:0021 s:0022 e:000019 BLOCK  example2.rb:15 [FINISH]
c:0004 p:0018 s:0014 e:000013 BLOCK  example2.rb:35 [FINISH]
c:0003 p:---- s:0010 e:000009 CFUNC  :times
c:0002 p:0021 s:0006 e:000005 EVAL   example2.rb:33 [FINISH]
c:0001 p:0000 s:0003 E:0008e0 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
example2.rb:33:in `<main>'
example2.rb:33:in `times'
example2.rb:35:in `block in <main>'
example2.rb:15:in `block (3 levels) in probing_module'

-- Machine register context ------------------------------------------------
 RIP: 0x00007fbf3622c7e0 RBP: 0x00007fbf3537ae40 RSP: 0x00007ffc825f7570
 RAX: 0x0000000000000000 RBX: 0x00007fbf33f9c330 RCX: 0x0000d88f02870002
 RDX: 0x00007fbf3560e568 RDI: 0x00007fbf33fcab50 RSI: 0x0000000002870000
  R8: 0x0000000000000000  R9: 0x00007fbf3537b000 R10: 0x00007fbf33f9c330
 R11: 0x00007fbf3537ae40 R12: 0x00007fbf3560d1e0 R13: 0x000000000000d88f
 R14: 0x00007fbf3560e220 R15: 0x00007fbf3560e1f8 EFL: 0x0000000000010246

-- C level backtrace information -------------------------------------------
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_print_backtrace+0x11) [0x7fbf3624f7ca] vm_dump.c:759
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_vm_bugreport) vm_dump.c:1045
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_bug_for_fatal_signal+0xf4) [0x7fbf360546b4] error.c:820
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(sigsegv+0x4d) [0x7fbf361a5b7d] signal.c:964
/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7fbf35f453c0] ../sysdeps/pthread/funlockfile.c:28
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_search_method_fastpath+0x0) [0x7fbf3622c7e0] vm_insnhelper.c:1939
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_search_super_method) vm_insnhelper.c:3785
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_sendish+0x25) [0x7fbf36237286] vm_insnhelper.c:4654
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_exec_core) insns.def:864
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_vm_exec+0xe7) [0x7fbf3623af07] vm.c:2196
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(invoke_bmethod+0x15a) [0x7fbf3623bb5a] vm.c:1328
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_call_bmethod+0x116) [0x7fbf3623c326] vm_insnhelper.c:3090
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_sendish+0x3) [0x7fbf36235475] vm_insnhelper.c:4651
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_exec_core) insns.def:777
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_vm_exec+0xe7) [0x7fbf3623af07] vm.c:2196
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_yield_1+0x2e7) [0x7fbf3623f007] vm.c:1298
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(int_dotimes+0x5c) [0x7fbf360fb7ec] numeric.c:5213
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_call_cfunc_with_frame+0x12b) [0x7fbf3622743b] vm_insnhelper.c:3025
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_call_method_each_type+0x79) [0x7fbf3623c419] vm_insnhelper.c:3541
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_call_method+0xb4) [0x7fbf3623cdd4] vm_insnhelper.c:3665
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_sendish+0x13d) [0x7fbf3622c0bd] vm_insnhelper.c:4651
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(vm_exec_core+0x22a) [0x7fbf3623552a] insns.def:758
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_vm_exec+0xe7) [0x7fbf3623af07] vm.c:2196
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(rb_ec_exec_node+0xbb) [0x7fbf360591eb] eval.c:280
/home/lewis/.rbenv/versions/3.1.0-preview1/lib/libruby.so.3.1(ruby_run_node+0x5a) [0x7fbf3605f41a] eval.c:321
/home/lewis/.rbenv/versions/3.1.0-preview1/bin/ruby(main+0x73) [0x55bfb7ca71d3] ./main.c:47
...

Possibly related backtrace from our application code

-- C level backtrace information -------------------------------------------
/usr/local/lib/libruby.so.3.0(rb_print_backtrace+0x11) [0x7f10a8a4d2e3] vm_dump.c:758
/usr/local/lib/libruby.so.3.0(rb_vm_bugreport) vm_dump.c:998
/usr/local/lib/libruby.so.3.0(rb_bug_for_fatal_signal+0xf4) [0x7f10a8857084] error.c:786
/usr/local/lib/libruby.so.3.0(sigsegv+0x4d) [0x7f10a89a41bd] signal.c:960
/lib/x86_64-linux-gnu/libc.so.6(0x7f10a85cf210) [0x7f10a85cf210]
/usr/local/lib/libruby.so.3.0(vm_cc_invalidated_p+0x4) [0x7f10a88afde4] vm_callinfo.h:363
/usr/local/lib/libruby.so.3.0(rb_iseq_mark) iseq.c:362
/usr/local/lib/libruby.so.3.0(gc_mark_imemo+0x8) [0x7f10a887e4d0] gc.c:6224
/usr/local/lib/libruby.so.3.0(gc_mark_children) gc.c:6290
/usr/local/lib/libruby.so.3.0(rgengc_rememberset_mark+0x18e) [0x7f10a8880506] gc.c:7664
/usr/local/lib/libruby.so.3.0(gc_marks_start) gc.c:7224
/usr/local/lib/libruby.so.3.0(gc_marks) gc.c:7502
/usr/local/lib/libruby.so.3.0(gc_start) gc.c:8322
/usr/local/lib/libruby.so.3.0(heap_prepare+0x2b) [0x7f10a888308b] gc.c:2049
/usr/local/lib/libruby.so.3.0(heap_next_freepage) gc.c:2200
/usr/local/lib/libruby.so.3.0(ractor_cache_slots) gc.c:2219
/usr/local/lib/libruby.so.3.0(newobj_slowpath) gc.c:2265
/usr/local/lib/libruby.so.3.0(newobj_slowpath_wb_protected) gc.c:2284
/usr/local/lib/libruby.so.3.0(newobj_of0+0xe) [0x7f10a888333e] gc.c:2323
/usr/local/lib/libruby.so.3.0(newobj_of) gc.c:2333
/usr/local/lib/libruby.so.3.0(rb_wb_protected_newobj_of) gc.c:2355
/usr/local/lib/libruby.so.3.0(str_replace_shared+0x0) [0x7f10a89c2040] string.c:773
/usr/local/lib/libruby.so.3.0(str_new_shared) string.c:1238
/usr/local/lib/libruby.so.3.0(rb_str_new_shared) string.c:1244
/usr/local/lib/libruby.so.3.0(rb_str_subseq+0x13f) [0x7f10a89cbd7f] string.c:2606
/usr/local/lib/libruby.so.3.0(vm_call_cfunc_with_frame+0x11b) [0x7f10a8a2519b] vm_insnhelper.c:2926
/usr/local/lib/libruby.so.3.0(vm_sendish+0xe) [0x7f10a8a32277] vm_insnhelper.c:4527
/usr/local/lib/libruby.so.3.0(vm_exec_core) insns.def:789
/usr/local/lib/libruby.so.3.0(rb_vm_exec+0x19b) [0x7f10a8a37e6b] vm.c:2163
/usr/local/lib/libruby.so.3.0(rb_yield+0x25e) [0x7f10a8a3bd9e] vm.c:1263
/usr/local/lib/libruby.so.3.0(rb_ary_collect+0x5c) [0x7f10a87c888c] array.c:3635
/usr/local/lib/libruby.so.3.0(vm_call_cfunc_with_frame+0x11b) [0x7f10a8a2519b] vm_insnhelper.c:2926
/usr/local/lib/libruby.so.3.0(vm_sendish+0x133) [0x7f10a8a28fa3] vm_insnhelper.c:4527
/usr/local/lib/libruby.so.3.0(vm_exec_core+0x1ef) [0x7f10a8a322ef] insns.def:770
/usr/local/lib/libruby.so.3.0(rb_vm_exec+0x19b) [0x7f10a8a37e6b] vm.c:2163
/usr/local/lib/libruby.so.3.0(each_with_index_i+0x77) [0x7f10a88487a7] enum.c:2400
/usr/local/lib/libruby.so.3.0(rb_vm_pop_frame+0x0) [0x7f10a8a2e38a] vm_insnhelper.c:3732
/usr/local/lib/libruby.so.3.0(vm_yield_with_cfunc) vm_insnhelper.c:3733
/usr/local/lib/libruby.so.3.0(invoke_block_from_c_bh+0x24) [0x7f10a8a3beab] vm.c:1358
/usr/local/lib/libruby.so.3.0(vm_yield) vm.c:1398
/usr/local/lib/libruby.so.3.0(rb_yield_0) vm_eval.c:1331
/usr/local/lib/libruby.so.3.0(rb_yield) vm_eval.c:1347
/usr/local/lib/libruby.so.3.0(RB_FL_TEST_RAW+0x0) [0x7f10a87c1e4c] array.c:2523
/usr/local/lib/libruby.so.3.0(RB_FL_ANY_RAW) ./include/ruby/internal/fl_type.h:258
/usr/local/lib/libruby.so.3.0(rb_array_len) ./include/ruby/internal/core/rarray.h:135
...
Actions #1

Updated by lewispb (Lewis Buckley) 3 months ago

  • Description updated (diff)
Actions #2

Updated by lewispb (Lewis Buckley) 3 months ago

  • Description updated (diff)

Updated by peterzhu2118 (Peter Zhu) 3 months ago

Thank you for the report. I have a fix prepared here: https://github.com/ruby/ruby/pull/5108

Actions #4

Updated by peterzhu2118 (Peter Zhu) 3 months ago

  • Backport changed from 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN to 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED
Actions #5

Updated by peterzhu2118 (Peter Zhu) 3 months ago

  • Status changed from Open to Closed
Actions #6

Updated by nagachika (Tomoyuki Chikanaga) 2 months ago

  • Backport changed from 2.6: DONTNEED, 2.7: DONTNEED, 3.0: REQUIRED to 2.6: DONTNEED, 2.7: DONTNEED, 3.0: DONE

ruby_3_0 b6f87d527f59257f07ba6774addaefdedee4fcde merged revision(s) 84202963c52e02cecad3e6b2fad478bfbeee1bc7.

Actions

Also available in: Atom PDF