Skip to content

Fix integer overflow checks in enumerator#15829

Merged
nobu merged 1 commit intoruby:masterfrom
odaysec:patch-1
Jan 9, 2026
Merged

Fix integer overflow checks in enumerator#15829
nobu merged 1 commit intoruby:masterfrom
odaysec:patch-1

Conversation

@odaysec
Copy link
Copy Markdown
Contributor

@odaysec odaysec commented Jan 9, 2026

fix this kind of problem you must avoid performing a signed addition that may overflow and then using its result in a comparison. Instead, reformulate the condition in terms of inequalities that do not overflow, or perform the addition in a wider or unsigned type where overflow is either impossible or well‑defined, and then convert back safely.

For this specific case, the intention of if (i + unit < i) break; (for unit >= 0) is to stop the loop if incrementing i by unit would overflow the signed long range. A safe, equivalent check is to compare i against LONG_MAX - unit: if i > LONG_MAX - unit, then i + unit would exceed LONG_MAX and overflow. Similarly, in the unit < 0 branch, the intention of if (i + unit > i) break; is to detect overflow when adding a negative unit; the safe equivalent is to check i < LONG_MIN - unit (since unit is negative, LONG_MIN - unit is well‑defined and ≥ LONG_MIN), meaning that adding unit would go below LONG_MIN.

Concretely, in the first loop (for unit >= 0) at line 4011, replace if (i + unit < i) break; with if (i > LONG_MAX - unit) break;. In the second loop (for unit < 0) at line 4024, replace if (i + unit > i) break; with if (i < LONG_MIN - unit) break;. These changes preserve existing behavior while avoiding undefined signed overflow. To use LONG_MAX and LONG_MIN, we need <limits.h>. Since we cannot assume it is already included and we’re allowed to add standard headers, add #include <limits.h> near the other #includes at the top of enumerator.c.

References

comp.lang.c FAQ list · Question 3.19 (Preserving rules)
INT31-C. Ensure that integer conversions do not result in lost or misinterpreted data
Integer Overflow in C/C++

@launchable-app
Copy link
Copy Markdown

launchable-app bot commented Jan 9, 2026

3/67208 Tests Failed

test/-ext-/stack/test_stack_overflow.rb#test_fiber_stack_overflow
Error:
Test_StackOverflow#test_fiber_stack_overflow:
Test::Unit::ProxyError: execution of Test::Unit::CoreAssertions#assert_separately expired timeout (10 sec)
pid 62196 killed by SIGTRAP (signal 5)
| 

    /Users/runner/work/ruby/ruby/src/test/-ext-/stack/test_stack_overflow.rb:42:in 'Test_StackOverflow#test_fiber_stack_overflow'

test/-ext-/stack/test_stack_overflow.rb#test_overflow
Error:
Test_StackOverflow#test_overflow:
Test::Unit::ProxyError: execution of Test::Unit::CoreAssertions#assert_separately expired timeout (10 sec)
pid 78563 killed by SIGKILL (signal 9)
| 
| -:11: [BUG] Aborted at 0x000003e90001259f
| ruby 4.1.0dev (2026-01-09T03:31:57Z pull/15829/merge 1939431493) +PRISM +GC[mmtk] [x86_64-linux]
| 
| -- Control frame information -----------------------------------------------
| c:0005 p:---- s:0022 e:000021 l:y b:---- CFUNC  :alloca_overflow
| c:0004 p:0004 s:0018 e:000017 l:n b:---- BLOCK  -:11
| c:0003 p:0032 s:0015 e:000014 l:y b:0001 METHOD /home/runner/work/ruby/ruby/src/tool/lib/core_assertions.rb:471
| c:0002 p:0049 s:0006 e:000005 l:n b:---- EVAL   -:10 [FINISH]
| c:0001 p:0000 s:0003 E:0016a0 l:y b:---- DUMMY  [FINISH]
| 
| -- Ruby level backtrace information ----------------------------------------
| -:10:in '<main>'
| /home/runner/work/ruby/ruby/src/tool/lib/core_assertions.rb:471:in 'assert_raise'
| -:11:in 'block in <main>'
| -:11:in 'alloca_overflow'
| 
| -- Threading information ---------------------------------------------------
| Total ractor count: 1
| Ruby thread count for this ractor: 1
| 
| -- Machine register context ------------------------------------------------
|  RIP: 0x00007f506dcab176 RBP: 0x00007ffe5d207e80 RSP: 0x00007ffe5d207e78
|  RAX: 0x0000000000000411 RBX: 0xfffffffffffffef8 RCX: 0x0000000000000006
|  RDX: 0x0000000000000000 RDI: 0x00007f506de03ac0 RSI: 0x0000558b6ce104a0
|   R8: 0x0000558b6cc3c010  R9: 0x0000000000000007 R10: 0x0000558b6ce104b0
|  R11: 0x26999027b6c1c5de R12: 0x0000000000000016 R13: 0x0000558b6ce104a0
|  R14: 0x0000000000000000 R15: 0x0000000055550083 EFL: 0x0000000000000246
| 
| -- C level backtrace information -------------------------------------------
| /home/runner/work/ruby/ruby/build/ruby(rb_print_backtrace+0x14) [0x558b56cba78f] ../src/vm_dump.c:1105
| /home/runner/work/ruby/ruby/build/ruby(rb_vm_bugreport) ../src/vm_dump.c:1450
| /home/runner/work/ruby/ruby/build/ruby(rb_bug_for_fatal_signal+0x102) [0x558b56f720c2] ../src/error.c:1131
| /home/runner/work/ruby/ruby/build/ruby(sigabrt+0x46) [0x558b56bf2956] ../src/signal.c:962
| /lib/x86_64-linux-gnu/libc.so.6(0x7f506dc45330) [0x7f506dc45330]
| /lib/x86_64-linux-gnu/libc.so.6(0x7f506dcab176) [0x7f506dcab176]
| /lib/x86_64-linux-gnu/libc.so.6(__libc_free+0x7e) [0x7f506dcaddae]
| /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so(stack_alloca_overflow+0x21) [0x7f506ded9191] ../../../../src/ext/-test-/stack/stack.c:19
| /home/runner/work/ruby/ruby/build/ruby(vm_call_cfunc_with_frame_+0x10d) [0x558b56c856fd] ../src/vm_insnhelper.c:3902
| /home/runner/work/ruby/ruby/build/ruby(vm_sendish+0x111) [0x558b56c8ed11] ../src/vm_insnhelper.c:6124
| /home/runner/work/ruby/ruby/build/ruby(vm_exec_core+0x84) [0x558b56ca7f64] /home/runner/work/ruby/ruby/build/insns.def:904
| /home/runner/work/ruby/ruby/build/ruby(vm_exec_loop+0xa) [0x558b56c98602] ../src/vm.c:2825
| /home/runner/work/ruby/ruby/build/ruby(rb_vm_exec) ../src/vm.c:2801
| /home/runner/work/ruby/ruby/build/ruby(rb_ec_exec_node+0xa5) [0x558b56aaeee5] ../src/eval.c:283
| /home/runner/work/ruby/ruby/build/ruby(ruby_run_node+0x69) [0x558b56ab1499] ../src/eval.c:321
| /home/runner/work/ruby/ruby/build/ruby(rb_main+0x21) [0x558b56aab966] ../src/main.c:42
| /home/runner/work/ruby/ruby/build/ruby(main) ../src/main.c:62
| /lib/x86_64-linux-gnu/libc.so.6(0x7f506dc2a1ca) [0x7f506dc2a1ca]
| /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x8b) [0x7f506dc2a28b]
| [0x558b56aab9b5]
| 
| -- Other runtime information -----------------------------------------------
| 
| * Loaded script: -
| 
| * Ruby Box: disabled
| * Loaded features:
| 
|     0 enumerator.so
|     1 thread.rb
|     2 fiber.so
|     3 rational.so
|     4 complex.so
|     5 pathname.so
|     6 ruby2_keywords.rb
|     7 set.rb
|     8 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
|     9 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
|    10 /home/runner/work/ruby/ruby/src/lib/open3/version.rb
|    11 /home/runner/work/ruby/ruby/src/lib/open3.rb
|    12 /home/runner/work/ruby/ruby/src/lib/timeout.rb
|    13 /home/runner/work/ruby/ruby/build/rbconfig.rb
|    14 /home/runner/work/ruby/ruby/src/tool/lib/find_executable.rb
|    15 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
|    16 /home/runner/work/ruby/ruby/src/tool/lib/envutil.rb
|    17 /home/runner/work/ruby/ruby/src/tool/lib/colorize.rb
|    18 /home/runner/work/ruby/ruby/src/tool/lib/leakchecker.rb
|    19 /home/runner/work/ruby/ruby/src/lib/prettyprint.rb
|    20 /home/runner/work/ruby/ruby/src/lib/pp.rb
|    21 /home/runner/work/ruby/ruby/src/tool/lib/test/unit/assertions.rb
|    22 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
|    23 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
|    24 /home/runner/work/ruby/ruby/src/tool/lib/core_assertions.rb
|    25 /home/runner/work/ruby/ruby/src/tool/lib/test/unit/testcase.rb
|    26 /home/runner/work/ruby/ruby/src/tool/lib/test/jobserver.rb
|    27 /home/runner/work/ruby/ruby/src/lib/optparse.rb
|    28 /home/runner/work/ruby/ruby/src/tool/lib/test/unit.rb
|    29 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 
| * Process memory map:
| 
| 20000000000-20000010000 rw-p 00000000 00:00 0                            [anon:mmtk:misc:RawMemoryFreeList]
| 200ffc00000-20100000000 rw-p 00000000 00:00 0                            [anon:mmtk:space:immix]
| c0800000000-c0803c00000 ---p 00000000 00:00 0                            [anon:mmtk:sidemeta:immix:VO_BIT]
| c0803c00000-c0804000000 rw-p 00000000 00:00 0                            [anon:mmtk:sidemeta:immix:VO_BIT]
| c0804000000-c1000000000 ---p 00000000 00:00 0                            [anon:mmtk:sidemeta:immix:VO_BIT]
| c1000000000-c1800000000 ---p 00000000 00:00 0                            [anon:mmtk:sidemeta:immortal:VO_BIT]
| c1800000000-c2000000000 ---p 00000000 00:00 0                            [anon:mmtk:sidemeta:los:VO_BIT]
| c2000000000-c2800000000 ---p 00000000 00:00 0                            [anon:mmtk:sidemeta:nonmoving:VO_BIT]
| e0002000000-e0002400000 rw-p 00000000 00:00 0                            [anon:mmtk:sidemeta:immix:CHUNK_MARK]
| 4e0a00000000-4e0a00c00000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:IX_LINE_MARK]
| 4e0a00c00000-4e0a01000000 rw-p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:IX_LINE_MARK]
| 4e0a01000000-4e0c00000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:IX_LINE_MARK]
| 4e1000000000-4e1200000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:nonmoving:IX_LINE_MARK]
| 4e8804000000-4e8804400000 rw-p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:IX_BLOCK_DEFRAG]
| 4e8804400000-4e8808000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:IX_BLOCK_DEFRAG]
| 4e8810000000-4e8814000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:nonmoving:IX_BLOCK_DEFRAG]
| 4e8904000000-4e8904400000 rw-p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:IX_BLOCK_MARK]
| 4e8904400000-4e8908000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:IX_BLOCK_MARK]
| 4e8910000000-4e8914000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:nonmoving:IX_BLOCK_MARK]
| 52ba80000000-52ba87c00000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalForwardingBitsSpec]
| 52ba87c00000-52ba88000000 rw-p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalForwardingBitsSpec]
| 52ba88000000-52ca80000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalForwardingBitsSpec]
| 52ea80000000-52fa80000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:nonmoving:VMLocalForwardingBitsSpec]
| 558b56a3b000-558b56a8f000 r--p 00000000 08:11 352798                     /home/runner/work/ruby/ruby/build/ruby
| 558b56a8f000-558b57032000 r-xp 00054000 08:11 352798                     /home/runner/work/ruby/ruby/build/ruby
| 558b57032000-558b5720b000 r--p 005f7000 08:11 352798                     /home/runner/work/ruby/ruby/build/ruby
| 558b5720b000-558b5722f000 r--p 007cf000 08:11 352798                     /home/runner/work/ruby/ruby/build/ruby
| 558b5722f000-558b57232000 rw-p 007f3000 08:11 352798                     /home/runner/work/ruby/ruby/build/ruby
| 558b57232000-558b57247000 rw-p 00000000 00:00 0 
| 558b6cc3c000-558b6d10e000 rw-p 00000000 00:00 0                          [heap]
| 56b280000000-56b283c00000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalMarkBitSpec]
| 56b283c00000-56b284000000 rw-p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalMarkBitSpec]
| 56b284000000-56ba80000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalMarkBitSpec]
| 56ba80000000-56c280000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immortal:VMLocalMarkBitSpec]
| 56ca80000000-56d280000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:nonmoving:VMLocalMarkBitSpec]
| 58b280000000-58b283c00000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalPinningBitSpec]
| 58b283c00000-58b284000000 rw-p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalPinningBitSpec]
| 58b284000000-58ba80000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:immix:VMLocalPinningBitSpec]
| 58ca80000000-58d280000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:nonmoving:VMLocalPinningBitSpec]
| 5aaa98000000-5aaaa0000000 ---p 00000000 00:00 0                          [anon:mmtk:sidemeta:los:VMLocalLOSMarkNurserySpec]
| 7f503c400000-7f503ff0b000 r--s 00000000 08:11 352798                     /home/runner/work/ruby/ruby/build/ruby
| 7f5040000000-7f5058000000 rw-p 00000000 00:00 0                          [anon:Ruby:Init_default_shapes:shape_cache]
| 7f5058000000-7f505803a000 rw-p 00000000 00:00 0 
| 7f505803a000-7f505c000000 ---p 00000000 00:00 0 
| 7f505c000000-7f505c02a000 rw-p 00000000 00:00 0 
| 7f505c02a000-7f5060000000 ---p 00000000 00:00 0 
| 7f5060000000-7f5060021000 rw-p 00000000 00:00 0 
| 7f5060021000-7f5064000000 ---p 00000000 00:00 0 
| 7f5065c00000-7f5065e07000 r--s 00000000 08:11 34624                      /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5065fc0000-7f5065fc1000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5065fc1000-7f5066002000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066002000-7f5066003000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066003000-7f5066044000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066044000-7f5066045000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066045000-7f5066086000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066086000-7f5066087000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066087000-7f50660c8000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50660c8000-7f50660c9000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50660c9000-7f506610a000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506610a000-7f506610b000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506610b000-7f506614c000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506614c000-7f506614d000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506614d000-7f506618e000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506618e000-7f506618f000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506618f000-7f50661d0000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50661d0000-7f50661d1000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50661d1000-7f5066212000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066212000-7f5066213000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066213000-7f5066254000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066254000-7f5066255000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066255000-7f5066296000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066296000-7f5066297000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066297000-7f50662d8000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50662d8000-7f50662d9000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50662d9000-7f506631a000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506631a000-7f506631b000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506631b000-7f506635c000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506635c000-7f506635d000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506635d000-7f506639e000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506639e000-7f506639f000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506639f000-7f50663e0000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50663e0000-7f50663e1000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50663e1000-7f5066422000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066422000-7f5066423000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066423000-7f5066464000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066464000-7f5066465000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066465000-7f50664a6000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50664a6000-7f50664a7000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50664a7000-7f50664e8000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50664e8000-7f50664e9000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50664e9000-7f506652a000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506652a000-7f506652b000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506652b000-7f506656c000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506656c000-7f506656d000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506656d000-7f50665ae000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50665ae000-7f50665af000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50665af000-7f50665f0000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50665f0000-7f50665f1000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50665f1000-7f5066632000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066632000-7f5066633000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066633000-7f5066674000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066674000-7f5066675000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066675000-7f50666b6000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50666b6000-7f50666b7000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50666b7000-7f50666f8000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50666f8000-7f50666f9000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50666f9000-7f506673a000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506673a000-7f506673b000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506673b000-7f506677c000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506677c000-7f506677d000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f506677d000-7f50667be000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50667be000-7f50667bf000 ---p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f50667bf000-7f5066800000 rw-p 00000000 00:00 0                          [anon:Ruby:fiber_pool_allocate_memory]
| 7f5066800000-7f5067c00000 rw-p 00000000 00:00 0                          [anon:Ruby:Init_default_shapes:shape_list]
| 7f5067dff000-7f5067e00000 ---p 00000000 00:00 0 
| 7f5067e00000-7f5068000000 rw-p 00000000 00:00 0 
| 7f5068000000-7f5068021000 rw-p 00000000 00:00 0 
| 7f5068021000-7f506c000000 ---p 00000000 00:00 0 
| 7f506c1fc000-7f506c1fd000 ---p 00000000 00:00 0 
| 7f506c1fd000-7f506d1fd000 rw-p 00000000 00:00 0 
| 7f506d1fd000-7f506d1fe000 ---p 00000000 00:00 0 
| 7f506d1fe000-7f506d3fe000 rw-p 00000000 00:00 0 
| 7f506d3fe000-7f506d3ff000 ---p 00000000 00:00 0 
| 7f506d3ff000-7f506d5ff000 rw-p 00000000 00:00 0 
| 7f506d5ff000-7f506d600000 ---p 00000000 00:00 0 
| 7f506d600000-7f506d800000 rw-p 00000000 00:00 0 
| 7f506d800000-7f506d851000 r--p 00000000 08:11 554657                     /home/runner/ruby_gc/librubygc.mmtk.so
| 7f506d851000-7f506da08000 r-xp 00051000 08:11 554657                     /home/runner/ruby_gc/librubygc.mmtk.so
| 7f506da08000-7f506dab2000 r--p 00208000 08:11 554657                     /home/runner/ruby_gc/librubygc.mmtk.so
| 7f506dab2000-7f506dae8000 r--p 002b1000 08:11 554657                     /home/runner/ruby_gc/librubygc.mmtk.so
| 7f506dae8000-7f506daea000 rw-p 002e7000 08:11 554657                     /home/runner/ruby_gc/librubygc.mmtk.so
| 7f506daea000-7f506daec000 rw-p 00000000 00:00 0 
| 7f506dc00000-7f506dc28000 r--p 00000000 08:11 34624                      /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f506dc28000-7f506ddb0000 r-xp 00028000 08:11 34624                      /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f506ddb0000-7f506ddff000 r--p 001b0000 08:11 34624                      /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f506ddff000-7f506de03000 r--p 001fe000 08:11 34624                      /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f506de03000-7f506de05000 rw-p 00202000 08:11 34624                      /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f506de05000-7f506de12000 rw-p 00000000 00:00 0 
| 7f506de43000-7f506de84000 rw-p 00000000 00:00 0 
| 7f506de84000-7f506de86000 r--p 00000000 08:11 536980                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f506de86000-7f506de8b000 r-xp 00002000 08:11 536980                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f506de8b000-7f506de8c000 r--p 00007000 08:11 536980                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f506de8c000-7f506de8d000 r--p 00008000 08:11 536980                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f506de8d000-7f506de8e000 rw-p 00009000 08:11 536980                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f506de8e000-7f506de8f000 r--p 00000000 08:11 536841                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f506de8f000-7f506de90000 r-xp 00001000 08:11 536841                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f506de90000-7f506de91000 r--p 00002000 08:11 536841                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f506de91000-7f506de92000 r--p 00002000 08:11 536841                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f506de92000-7f506de93000 rw-p 00003000 08:11 536841                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f506de93000-7f506deb4000 rw-p 00000000 00:00 0 
| 7f506deb6000-7f506deb7000 r--p 00000000 08:11 537053                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f506deb7000-7f506deb9000 r-xp 00001000 08:11 537053                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f506deb9000-7f506deba000 r--p 00003000 08:11 537053                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f506deba000-7f506debb000 r--p 00003000 08:11 537053                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f506debb000-7f506debc000 rw-p 00004000 08:11 537053                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f506ded8000-7f506ded9000 r--p 00000000 08:11 536857                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f506ded9000-7f506deda000 r-xp 00001000 08:11 536857                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f506deda000-7f506dedb000 r--p 00002000 08:11 536857                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f506dedb000-7f506dedc000 r--p 00002000 08:11 536857                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f506dedc000-7f506dedd000 rw-p 00003000 08:11 536857                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f506dedd000-7f506dfe3000 rw-p 00000000 00:00 0 
| 7f506dfe3000-7f506dfe7000 r--p 00000000 08:11 6579                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f506dfe7000-7f506e00b000 r-xp 00004000 08:11 6579                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f506e00b000-7f506e00f000 r--p 00028000 08:11 6579                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f506e00f000-7f506e010000 r--p 0002b000 08:11 6579                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f506e010000-7f506e011000 rw-p 0002c000 08:11 6579                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f506e011000-7f506e021000 r--p 00000000 08:11 34627                      /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f506e021000-7f506e0a0000 r-xp 00010000 08:11 34627                      /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f506e0a0000-7f506e0f8000 r--p 0008f000 08:11 34627                      /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f506e0f8000-7f506e0f9000 r--p 000e7000 08:11 34627                      /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f506e0f9000-7f506e0fa000 rw-p 000e8000 08:11 34627                      /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f506e0fa000-7f506e0fc000 r--p 00000000 08:11 5138                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f506e0fc000-7f506e111000 r-xp 00002000 08:11 5138                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f506e111000-7f506e12a000 r--p 00017000 08:11 5138                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f506e12a000-7f506e12b000 r--p 0002f000 08:11 5138                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f506e12b000-7f506e12c000 rw-p 00030000 08:11 5138                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f506e12c000-7f506e134000 rw-p 00000000 00:00 0 
| 7f506e134000-7f506e13e000 r--p 00000000 08:11 6265                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.5.0
| 7f506e13e000-7f506e1a1000 r-xp 0000a000 08:11 6265                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.5.0
| 7f506e1a1000-7f506e1b6000 r--p 0006d000 08:11 6265                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.5.0
| 7f506e1b6000-7f506e1b7000 r--p 00081000 08:11 6265                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.5.0
| 7f506e1b7000-7f506e1b8000 rw-p 00082000 08:11 6265                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.5.0
| 7f506e1b8000-7f506e1ba000 r--p 00000000 08:11 5152                       /usr/lib/x86_64-linux-gnu/libz.so.1.3
| 7f506e1ba000-7f506e1cc000 r-xp 00002000 08:11 5152                       /usr/lib/x86_64-linux-gnu/libz.so.1.3
| 7f506e1cc000-7f506e1d2000 r--p 00014000 08:11 5152                       /usr/lib/x86_64-linux-gnu/libz.so.1.3
| 7f506e1d2000-7f506e1d3000 r--p 0001a000 08:11 5152                       /usr/lib/x86_64-linux-gnu/libz.so.1.3
| 7f506e1d3000-7f506e1d4000 rw-p 0001b000 08:11 5152                       /usr/lib/x86_64-linux-gnu/libz.so.1.3
| 7f506e1d4000-7f506e1d5000 r--p 00000000 08:11 536501                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f506e1d5000-7f506e1d6000 r-xp 00001000 08:11 536501                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f506e1d6000-7f506e1d7000 r--p 00002000 08:11 536501                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f506e1d7000-7f506e1d8000 r--p 00002000 08:11 536501                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f506e1d8000-7f506e1d9000 rw-p 00003000 08:11 536501                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f506e1d9000-7f506e1da000 r--p 00000000 08:11 536490                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f506e1da000-7f506e1db000 r-xp 00001000 08:11 536490                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f506e1db000-7f506e1dc000 r--p 00002000 08:11 536490                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f506e1dc000-7f506e1dd000 r--p 00002000 08:11 536490                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f506e1dd000-7f506e1de000 rw-p 00003000 08:11 536490                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f506e1de000-7f506e1e0000 rw-p 00000000 00:00 0 
| 7f506e1e0000-7f506e1e4000 r--p 00000000 00:00 0                          [vvar]
| 7f506e1e4000-7f506e1e6000 r-xp 00000000 00:00 0                          [vdso]
| 7f506e1e6000-7f506e1e7000 r--p 00000000 08:11 34621                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f506e1e7000-7f506e212000 r-xp 00001000 08:11 34621                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f506e212000-7f506e21c000 r--p 0002c000 08:11 34621                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f506e21c000-7f506e21e000 r--p 00036000 08:11 34621                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f506e21e000-7f506e220000 rw-p 00038000 08:11 34621                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7ffe5d1e9000-7ffe5d20d000 rw-p 00000000 00:00 0                          [stack]
| ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]
| 
| 

    /home/runner/work/ruby/ruby/src/test/-ext-/stack/test_stack_overflow.rb:14:in 'Test_StackOverflow#test_overflow'

test/-ext-/stack/test_stack_overflow.rb#test_thread_stack_overflow
Error:
Test_StackOverflow#test_thread_stack_overflow:
Test::Unit::ProxyError: execution of Test::Unit::CoreAssertions#assert_separately expired timeout (10 sec)
pid 79756 killed by SIGKILL (signal 9)
| 
| -:15: [BUG] Aborted at 0x000003e90000f3cc
| ruby 4.1.0dev (2026-01-09T03:31:57Z pull/15829/merge 1939431493) +PRISM [x86_64-linux]
| 
| -- Control frame information -----------------------------------------------
| c:0005 p:---- s:0023 e:000022 l:y b:---- CFUNC  :join
| c:0004 p:0004 s:0019 e:000018 l:n b:---- BLOCK  -:15
| c:0003 p:0032 s:0016 e:000015 l:y b:0001 METHOD /home/runner/work/ruby/ruby/src/tool/lib/core_assertions.rb:471
| c:0002 p:0056 s:0007 E:001dd8 l:n b:---- EVAL   -:14 [FINISH]
| c:0001 p:0000 s:0003 E:001730 l:y b:---- DUMMY  [FINISH]
| 
| -- Ruby level backtrace information ----------------------------------------
| -:14:in '<main>'
| /home/runner/work/ruby/ruby/src/tool/lib/core_assertions.rb:471:in 'assert_raise'
| -:15:in 'block in <main>'
| -:15:in 'join'
| 
| -- Threading information ---------------------------------------------------
| Total ractor count: 1
| Ruby thread count for this ractor: 2
| 
| -- Machine register context ------------------------------------------------
|  RIP: 0x00007f5ea1691117 RBP: 0x000056382a41a7e8 RSP: 0x00007ffc75916950
|  RAX: 0xfffffffffffffffc RBX: 0x0000000000000000 RCX: 0x00007f5ea1691117
|  RDX: 0x0000000000000000 RDI: 0x000056382a41a810 RSI: 0x0000000000000189
|   R8: 0x0000000000000000  R9: 0x00000000ffffffff R10: 0x0000000000000000
|  R11: 0x0000000000000246 R12: 0x0000000000000000 R13: 0x0000000000000000
|  R14: 0x0000000000000000 R15: 0x000056382a41a810 EFL: 0x0000000000000246
| 
| -- C level backtrace information -------------------------------------------
| /home/runner/work/ruby/ruby/build/ruby(rb_print_backtrace+0x8) [0x5638250bb4d6] ../src/vm_dump.c:1105
| /home/runner/work/ruby/ruby/build/ruby(rb_vm_bugreport) ../src/vm_dump.c:1450
| /home/runner/work/ruby/ruby/build/ruby(rb_bug_for_fatal_signal+0x115) [0x5638253745e5] ../src/error.c:1131
| /home/runner/work/ruby/ruby/build/ruby(sigabrt+0x46) [0x563824ff05c6] ../src/signal.c:962
| /lib/x86_64-linux-gnu/libc.so.6(0x7f5ea1642520) [0x7f5ea1642520]
| /lib/x86_64-linux-gnu/libc.so.6(0x7f5ea1691117) [0x7f5ea1691117]
| /lib/x86_64-linux-gnu/libc.so.6(pthread_cond_wait+0x211) [0x7f5ea1693a41]
| /home/runner/work/ruby/ruby/build/ruby(rb_native_cond_wait+0x8) [0x56382503b00a] ../src/thread_pthread.c:231
| /home/runner/work/ruby/ruby/build/ruby(thread_sched_wait_running_turn) ../src/thread_pthread.c:851
| /home/runner/work/ruby/ruby/build/ruby(thread_sched_to_waiting_until_wakeup+0x144) [0x56382503b7a4] ../src/thread_pthread.c:1114
| /home/runner/work/ruby/ruby/build/ruby(native_sleep+0x13) [0x563825044e5f] ../src/thread_pthread.c:3341
| /home/runner/work/ruby/ruby/build/ruby(sleep_forever) ../src/thread.c:1393
| /home/runner/work/ruby/ruby/build/ruby(thread_join_sleep) ../src/thread.c:1086
| /home/runner/work/ruby/ruby/build/ruby(rb_ec_ensure+0x111) [0x563824eb0121] ../src/eval.c:1146
| /home/runner/work/ruby/ruby/build/ruby(thread_join+0x169) [0x5638250395e9] ../src/thread.c:1143
| /home/runner/work/ruby/ruby/build/ruby(thread_join_m+0x95) [0x563825039725] ../src/thread.c:1244
| /home/runner/work/ruby/ruby/build/ruby(vm_cfp_consistent_p+0x0) [0x56382508f399] ../src/vm_insnhelper.c:3902
| /home/runner/work/ruby/ruby/build/ruby(vm_call_cfunc_with_frame_) ../src/vm_insnhelper.c:3904
| /home/runner/work/ruby/ruby/build/ruby(vm_sendish+0x175) [0x56382508d465] ../src/vm_insnhelper.c:6124
| /home/runner/work/ruby/ruby/build/ruby(vm_exec_core+0x90) [0x5638250a6850] /home/runner/work/ruby/ruby/build/insns.def:904
| /home/runner/work/ruby/ruby/build/ruby(rb_vm_exec+0x1fe) [0x563825097fde] ../src/vm.c:2798
| /home/runner/work/ruby/ruby/build/ruby(rb_ec_exec_node+0xf7) [0x563824eab617] ../src/eval.c:283
| /home/runner/work/ruby/ruby/build/ruby(ruby_run_node+0x62) [0x563824eaea62] ../src/eval.c:321
| /home/runner/work/ruby/ruby/build/ruby(rb_main+0x21) [0x563824ea8037] ../src/main.c:42
| /home/runner/work/ruby/ruby/build/ruby(main) ../src/main.c:62
| /lib/x86_64-linux-gnu/libc.so.6(0x7f5ea1629d90) [0x7f5ea1629d90]
| /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x7f5ea1629e40]
| [0x563824ea8085]
| 
| -- Other runtime information -----------------------------------------------
| 
| * Loaded script: -
| 
| * Ruby Box: disabled
| * Loaded features:
| 
|     0 enumerator.so
|     1 thread.rb
|     2 fiber.so
|     3 rational.so
|     4 complex.so
|     5 pathname.so
|     6 ruby2_keywords.rb
|     7 set.rb
|     8 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
|     9 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
|    10 /home/runner/work/ruby/ruby/src/lib/open3/version.rb
|    11 /home/runner/work/ruby/ruby/src/lib/open3.rb
|    12 /home/runner/work/ruby/ruby/src/lib/timeout.rb
|    13 /home/runner/work/ruby/ruby/build/rbconfig.rb
|    14 /home/runner/work/ruby/ruby/src/tool/lib/find_executable.rb
|    15 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
|    16 /home/runner/work/ruby/ruby/src/tool/lib/envutil.rb
|    17 /home/runner/work/ruby/ruby/src/tool/lib/colorize.rb
|    18 /home/runner/work/ruby/ruby/src/tool/lib/leakchecker.rb
|    19 /home/runner/work/ruby/ruby/src/lib/prettyprint.rb
|    20 /home/runner/work/ruby/ruby/src/lib/pp.rb
|    21 /home/runner/work/ruby/ruby/src/tool/lib/test/unit/assertions.rb
|    22 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
|    23 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
|    24 /home/runner/work/ruby/ruby/src/tool/lib/core_assertions.rb
|    25 /home/runner/work/ruby/ruby/src/tool/lib/test/unit/testcase.rb
|    26 /home/runner/work/ruby/ruby/src/tool/lib/test/jobserver.rb
|    27 /home/runner/work/ruby/ruby/src/lib/optparse.rb
|    28 /home/runner/work/ruby/ruby/src/tool/lib/test/unit.rb
|    29 /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 
| * Process memory map:
| 
| 563824e25000-563824e78000 r--p 00000000 08:11 337679                     /home/runner/work/ruby/ruby/build/ruby
| 563824e78000-563825434000 r-xp 00053000 08:11 337679                     /home/runner/work/ruby/ruby/build/ruby
| 563825434000-56382561f000 r--p 0060f000 08:11 337679                     /home/runner/work/ruby/ruby/build/ruby
| 56382561f000-563825643000 r--p 007f9000 08:11 337679                     /home/runner/work/ruby/ruby/build/ruby
| 563825643000-563825646000 rw-p 0081d000 08:11 337679                     /home/runner/work/ruby/ruby/build/ruby
| 563825646000-56382565b000 rw-p 00000000 00:00 0 
| 56382a413000-56382a83d000 rw-p 00000000 00:00 0                          [heap]
| 7f5e7c400000-7f5e7fec0000 r--s 00000000 08:11 337679                     /home/runner/work/ruby/ruby/build/ruby
| 7f5e80000000-7f5e80021000 rw-p 00000000 00:00 0 
| 7f5e80021000-7f5e84000000 ---p 00000000 00:00 0 
| 7f5e86200000-7f5e8641f000 r--s 00000000 08:11 5028                       /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5e8651e000-7f5e8651f000 ---p 00000000 00:00 0 
| 7f5e8651f000-7f5e8653f000 rw-p 00000000 00:00 0 
| 7f5e8653f000-7f5e86690000 rw-p 00000000 00:00 0 
| 7f5e8669e000-7f5e867b0000 rw-p 00000000 00:00 0 
| 7f5e867bf000-7f5e867c0000 ---p 00000000 00:00 0 
| 7f5e867c0000-7f5e86801000 rw-p 00000000 00:00 0 
| 7f5e86801000-7f5e86802000 ---p 00000000 00:00 0 
| 7f5e86802000-7f5e86843000 rw-p 00000000 00:00 0 
| 7f5e86843000-7f5e86844000 ---p 00000000 00:00 0 
| 7f5e86844000-7f5e86885000 rw-p 00000000 00:00 0 
| 7f5e86885000-7f5e86886000 ---p 00000000 00:00 0 
| 7f5e86886000-7f5e868c7000 rw-p 00000000 00:00 0 
| 7f5e868c7000-7f5e868c8000 ---p 00000000 00:00 0 
| 7f5e868c8000-7f5e86909000 rw-p 00000000 00:00 0 
| 7f5e86909000-7f5e8690a000 ---p 00000000 00:00 0 
| 7f5e8690a000-7f5e8694b000 rw-p 00000000 00:00 0 
| 7f5e8694b000-7f5e8694c000 ---p 00000000 00:00 0 
| 7f5e8694c000-7f5e8698d000 rw-p 00000000 00:00 0 
| 7f5e8698d000-7f5e8698e000 ---p 00000000 00:00 0 
| 7f5e8698e000-7f5e869cf000 rw-p 00000000 00:00 0 
| 7f5e869cf000-7f5e869d0000 ---p 00000000 00:00 0 
| 7f5e869d0000-7f5e86a11000 rw-p 00000000 00:00 0 
| 7f5e86a11000-7f5e86a12000 ---p 00000000 00:00 0 
| 7f5e86a12000-7f5e86a53000 rw-p 00000000 00:00 0 
| 7f5e86a53000-7f5e86a54000 ---p 00000000 00:00 0 
| 7f5e86a54000-7f5e86a95000 rw-p 00000000 00:00 0 
| 7f5e86a95000-7f5e86a96000 ---p 00000000 00:00 0 
| 7f5e86a96000-7f5e86ad7000 rw-p 00000000 00:00 0 
| 7f5e86ad7000-7f5e86ad8000 ---p 00000000 00:00 0 
| 7f5e86ad8000-7f5e86b19000 rw-p 00000000 00:00 0 
| 7f5e86b19000-7f5e86b1a000 ---p 00000000 00:00 0 
| 7f5e86b1a000-7f5e86b5b000 rw-p 00000000 00:00 0 
| 7f5e86b5b000-7f5e86b5c000 ---p 00000000 00:00 0 
| 7f5e86b5c000-7f5e86b9d000 rw-p 00000000 00:00 0 
| 7f5e86b9d000-7f5e86b9e000 ---p 00000000 00:00 0 
| 7f5e86b9e000-7f5e86bdf000 rw-p 00000000 00:00 0 
| 7f5e86bdf000-7f5e86be0000 ---p 00000000 00:00 0 
| 7f5e86be0000-7f5e86c21000 rw-p 00000000 00:00 0 
| 7f5e86c21000-7f5e86c22000 ---p 00000000 00:00 0 
| 7f5e86c22000-7f5e86c63000 rw-p 00000000 00:00 0 
| 7f5e86c63000-7f5e86c64000 ---p 00000000 00:00 0 
| 7f5e86c64000-7f5e86ca5000 rw-p 00000000 00:00 0 
| 7f5e86ca5000-7f5e86ca6000 ---p 00000000 00:00 0 
| 7f5e86ca6000-7f5e86ce7000 rw-p 00000000 00:00 0 
| 7f5e86ce7000-7f5e86ce8000 ---p 00000000 00:00 0 
| 7f5e86ce8000-7f5e86d29000 rw-p 00000000 00:00 0 
| 7f5e86d29000-7f5e86d2a000 ---p 00000000 00:00 0 
| 7f5e86d2a000-7f5e86d6b000 rw-p 00000000 00:00 0 
| 7f5e86d6b000-7f5e86d6c000 ---p 00000000 00:00 0 
| 7f5e86d6c000-7f5e86dad000 rw-p 00000000 00:00 0 
| 7f5e86dad000-7f5e86dae000 ---p 00000000 00:00 0 
| 7f5e86dae000-7f5e86def000 rw-p 00000000 00:00 0 
| 7f5e86def000-7f5e86df0000 ---p 00000000 00:00 0 
| 7f5e86df0000-7f5e86e31000 rw-p 00000000 00:00 0 
| 7f5e86e31000-7f5e86e32000 ---p 00000000 00:00 0 
| 7f5e86e32000-7f5e86e73000 rw-p 00000000 00:00 0 
| 7f5e86e73000-7f5e86e74000 ---p 00000000 00:00 0 
| 7f5e86e74000-7f5e86eb5000 rw-p 00000000 00:00 0 
| 7f5e86eb5000-7f5e86eb6000 ---p 00000000 00:00 0 
| 7f5e86eb6000-7f5e86ef7000 rw-p 00000000 00:00 0 
| 7f5e86ef7000-7f5e86ef8000 ---p 00000000 00:00 0 
| 7f5e86ef8000-7f5e86f39000 rw-p 00000000 00:00 0 
| 7f5e86f39000-7f5e86f3a000 ---p 00000000 00:00 0 
| 7f5e86f3a000-7f5e86f7b000 rw-p 00000000 00:00 0 
| 7f5e86f7b000-7f5e86f7c000 ---p 00000000 00:00 0 
| 7f5e86f7c000-7f5e86fbd000 rw-p 00000000 00:00 0 
| 7f5e86fbd000-7f5e86fbe000 ---p 00000000 00:00 0 
| 7f5e86fbe000-7f5e86fff000 rw-p 00000000 00:00 0 
| 7f5e86fff000-7f5e87000000 ---p 00000000 00:00 0 
| 7f5e87000000-7f5e88000000 rw-p 00000000 00:00 0 
| 7f5e88000000-7f5ea1400000 rw-p 00000000 00:00 0 
| 7f5ea1410000-7f5ea14d0000 rw-p 00000000 00:00 0 
| 7f5ea14e0000-7f5ea14f0000 rw-p 00000000 00:00 0 
| 7f5ea14fa000-7f5ea14fb000 r--p 00000000 08:11 337279                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f5ea14fb000-7f5ea14fc000 r-xp 00001000 08:11 337279                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f5ea14fc000-7f5ea14fd000 r--p 00002000 08:11 337279                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f5ea14fd000-7f5ea14fe000 r--p 00002000 08:11 337279                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f5ea14fe000-7f5ea14ff000 rw-p 00003000 08:11 337279                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/stack.so
| 7f5ea14ff000-7f5ea1600000 rw-p 00000000 00:00 0 
| 7f5ea1600000-7f5ea1628000 r--p 00000000 08:11 5028                       /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5ea1628000-7f5ea17bd000 r-xp 00028000 08:11 5028                       /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5ea17bd000-7f5ea1815000 r--p 001bd000 08:11 5028                       /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5ea1815000-7f5ea1816000 ---p 00215000 08:11 5028                       /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5ea1816000-7f5ea181a000 r--p 00215000 08:11 5028                       /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5ea181a000-7f5ea181c000 rw-p 00219000 08:11 5028                       /usr/lib/x86_64-linux-gnu/libc.so.6
| 7f5ea181c000-7f5ea1829000 rw-p 00000000 00:00 0 
| 7f5ea182a000-7f5ea182c000 r--p 00000000 08:11 337400                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f5ea182c000-7f5ea1831000 r-xp 00002000 08:11 337400                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f5ea1831000-7f5ea1832000 r--p 00007000 08:11 337400                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f5ea1832000-7f5ea1833000 ---p 00008000 08:11 337400                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f5ea1833000-7f5ea1834000 r--p 00008000 08:11 337400                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f5ea1834000-7f5ea1835000 rw-p 00009000 08:11 337400                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/io/console.so
| 7f5ea1835000-7f5ea1836000 r--p 00000000 08:11 337263                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f5ea1836000-7f5ea1837000 r-xp 00001000 08:11 337263                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f5ea1837000-7f5ea1838000 r--p 00002000 08:11 337263                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f5ea1838000-7f5ea1839000 r--p 00002000 08:11 337263                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f5ea1839000-7f5ea183a000 rw-p 00003000 08:11 337263                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/-test-/sanitizers.so
| 7f5ea183a000-7f5ea183b000 r--p 00000000 08:11 337424                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f5ea183b000-7f5ea183d000 r-xp 00001000 08:11 337424                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f5ea183d000-7f5ea183e000 r--p 00003000 08:11 337424                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f5ea183e000-7f5ea183f000 r--p 00003000 08:11 337424                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f5ea183f000-7f5ea1840000 rw-p 00004000 08:11 337424                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/rbconfig/sizeof.so
| 7f5ea1840000-7f5ea1850000 rw-p 00000000 00:00 0 
| 7f5ea1853000-7f5ea1858000 rw-p 00000000 00:00 0 
| 7f5ea1858000-7f5ea185b000 r--p 00000000 08:11 5024                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f5ea185b000-7f5ea1872000 r-xp 00003000 08:11 5024                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f5ea1872000-7f5ea1876000 r--p 0001a000 08:11 5024                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f5ea1876000-7f5ea1877000 r--p 0001d000 08:11 5024                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f5ea1877000-7f5ea1878000 rw-p 0001e000 08:11 5024                       /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f5ea1878000-7f5ea1886000 r--p 00000000 08:11 5031                       /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f5ea1886000-7f5ea1902000 r-xp 0000e000 08:11 5031                       /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f5ea1902000-7f5ea195d000 r--p 0008a000 08:11 5031                       /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f5ea195d000-7f5ea195e000 r--p 000e4000 08:11 5031                       /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f5ea195e000-7f5ea195f000 rw-p 000e5000 08:11 5031                       /usr/lib/x86_64-linux-gnu/libm.so.6
| 7f5ea195f000-7f5ea1961000 r--p 00000000 08:11 3631                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f5ea1961000-7f5ea1975000 r-xp 00002000 08:11 3631                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f5ea1975000-7f5ea198e000 r--p 00016000 08:11 3631                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f5ea198e000-7f5ea198f000 ---p 0002f000 08:11 3631                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f5ea198f000-7f5ea1990000 r--p 0002f000 08:11 3631                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f5ea1990000-7f5ea1991000 rw-p 00030000 08:11 3631                       /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
| 7f5ea1991000-7f5ea1999000 rw-p 00000000 00:00 0 
| 7f5ea1999000-7f5ea19a3000 r--p 00000000 08:11 3638                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
| 7f5ea19a3000-7f5ea1a02000 r-xp 0000a000 08:11 3638                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
| 7f5ea1a02000-7f5ea1a19000 r--p 00069000 08:11 3638                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
| 7f5ea1a19000-7f5ea1a1a000 r--p 0007f000 08:11 3638                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
| 7f5ea1a1a000-7f5ea1a1b000 rw-p 00080000 08:11 3638                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
| 7f5ea1a1b000-7f5ea1a1d000 r--p 00000000 08:11 3911                       /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
| 7f5ea1a1d000-7f5ea1a2e000 r-xp 00002000 08:11 3911                       /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
| 7f5ea1a2e000-7f5ea1a34000 r--p 00013000 08:11 3911                       /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
| 7f5ea1a34000-7f5ea1a35000 ---p 00019000 08:11 3911                       /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
| 7f5ea1a35000-7f5ea1a36000 r--p 00019000 08:11 3911                       /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
| 7f5ea1a36000-7f5ea1a37000 rw-p 0001a000 08:11 3911                       /usr/lib/x86_64-linux-gnu/libz.so.1.2.11
| 7f5ea1a39000-7f5ea1a3a000 r--p 00000000 08:11 336937                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f5ea1a3a000-7f5ea1a3b000 r-xp 00001000 08:11 336937                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f5ea1a3b000-7f5ea1a3c000 r--p 00002000 08:11 336937                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f5ea1a3c000-7f5ea1a3d000 r--p 00002000 08:11 336937                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f5ea1a3d000-7f5ea1a3e000 rw-p 00003000 08:11 336937                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/trans/transdb.so
| 7f5ea1a3e000-7f5ea1a3f000 r--p 00000000 08:11 336912                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f5ea1a3f000-7f5ea1a40000 r-xp 00001000 08:11 336912                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f5ea1a40000-7f5ea1a41000 r--p 00002000 08:11 336912                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f5ea1a41000-7f5ea1a42000 r--p 00002000 08:11 336912                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f5ea1a42000-7f5ea1a43000 rw-p 00003000 08:11 336912                     /home/runner/work/ruby/ruby/build/.ext/x86_64-linux/enc/encdb.so
| 7f5ea1a43000-7f5ea1a45000 rw-p 00000000 00:00 0 
| 7f5ea1a45000-7f5ea1a47000 r--p 00000000 08:11 5022                       /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f5ea1a47000-7f5ea1a71000 r-xp 00002000 08:11 5022                       /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f5ea1a71000-7f5ea1a7c000 r--p 0002c000 08:11 5022                       /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f5ea1a7d000-7f5ea1a7f000 r--p 00037000 08:11 5022                       /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7f5ea1a7f000-7f5ea1a81000 rw-p 00039000 08:11 5022                       /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
| 7ffc758f8000-7ffc7591b000 rw-p 00000000 00:00 0                          [stack]
| 7ffc75930000-7ffc75934000 r--p 00000000 00:00 0                          [vvar]
| 7ffc75934000-7ffc75936000 r-xp 00000000 00:00 0                          [vdso]
| ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]
| 
| 

    /home/runner/work/ruby/ruby/src/test/-ext-/stack/test_stack_overflow.rb:26:in 'Test_StackOverflow#test_thread_stack_overflow'

[-> View Test suite health in main branch]

Copy link
Copy Markdown
Member

@nobu nobu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove unrelated and unnecessary commits first.

regparse.c Outdated
Comment on lines +4789 to +4793
if ((size_t)i > (size_t)ONIGENC_CODE_TO_MBC_MAXLEN) {
r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
goto err;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here i should equal ONIGENC_MBC_MINLEN(env->enc), this check is redundant.

Comment on lines +10 to +19
// Allocate and touch memory to force actual stack usage:
volatile char *stack = alloca(1024);
// Allocate and touch memory to force actual memory usage:
char *buf = (char *)malloc(1024);
if (!buf) {
break;
}
volatile char *stack = buf;
stack[0] = (char)i;
stack[1023] = (char)i;
i++;
free(buf);
Copy link
Copy Markdown
Member

@nobu nobu Jan 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentionally repeating alloca to cause a stack overflow, as the function name and the comment describe.
This change doesn't only break the purpose, falls into an infinite loop.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants