Bug #18329
Updated by lewispb (Lewis Buckley) about 3 years ago
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:
``` ruby
# 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
...
```