Releases: jdx/ruby
Release list
3.3.12-1
Ruby 3.3.12 portable binaries
Released by Ruby: 2026-07-16
What's Changed
This release includes the following security fixes.
This release updates the default gem erb to 4.0.3.1 and the bundled gem net-imap to 0.4.25. The net-imap update fixes CVE-2026-42245, CVE-2026-42246, CVE-2026-42256, CVE-2026-42257, CVE-2026-42258, CVE-2026-47240, CVE-2026-47241 and CVE-2026-47242. Please see the release notes of net-imap v0.4.24 and net-imap v0.4.25 for the details of these fixes.
Full Changelog
Build revision: 3.3.12-1
3.3.12
Ruby 3.3.12 portable binaries
Released by Ruby: 2026-07-16
What's Changed
This release includes the following security fixes.
This release updates the default gem erb to 4.0.3.1 and the bundled gem net-imap to 0.4.25. The net-imap update fixes CVE-2026-42245, CVE-2026-42246, CVE-2026-42256, CVE-2026-42257, CVE-2026-42258, CVE-2026-47240, CVE-2026-47241 and CVE-2026-47242. Please see the release notes of net-imap v0.4.24 and net-imap v0.4.25 for the details of these fixes.
Full Changelog
4.0.6-1
Ruby 4.0.6 portable binaries
Released by Ruby: 2026-07-14
What's Changed
- Bug #22070:
Thread.each_caller_location(1, 1)segfaults when called from a cfunc - Ruby - Ruby Issue Tracking System - Bug #22075: heap-use-after-free in
rb_vm_ci_lookupunder parallel Ractors - Ruby - Ruby Issue Tracking System - Bug #22076: defined? returns nil for protected methods defined in a module even when callable - Ruby - Ruby Issue Tracking System
- Bug #22072: [BUG] should have cvar cache entry - Ruby - Ruby Issue Tracking System
- Bug #22074: YJIT misaligns locals when there are > 256 local variables - Ruby - Ruby Issue Tracking System
- Bug #22064: GC compaction breaks compare-by-identity sets - Ruby - Ruby Issue Tracking System
- Bug #22084: invokesuper from define_method in Ractor can call wrong super method or crash - Ruby - Ruby Issue Tracking System
- Bug #22092:
Array#sumtakes slow path, does not perform compensated summation of Float elements when init argument is a Float - Ruby - Ruby Issue Tracking System - Bug #14635: Float#round(n) returns a wrong result when n is big - Ruby - Ruby Issue Tracking System
- Bug #22079: Float#ceil gives incorrect result - Ruby - Ruby Issue Tracking System
- Bug #22096: Freeing a mutex locked by a fiber inside fiber scheduler can crash - Ruby - Ruby Issue Tracking System
- Bug #21996: Crash when modifying instance variables during inspect or Marshal dump - Ruby - Ruby Issue Tracking System
- Bug #22101: ASAN heap-use-after-free in rb_data_free after TypedData dfree frees dynamic rb_data_type_t - Ruby - Ruby Issue Tracking System
- Bug #22103: Constant-folded /o regexp crashes with dupstring of a Regexp - Ruby - Ruby Issue Tracking System
- Bug #21991:
$!stays as the first exception in Ruby Box - Ruby - Ruby Issue Tracking System - Feature #21881: Split the root box into the (newer) root box and the master of copied user boxes - Ruby - Ruby Issue Tracking System
- Bug #22120: Segfault caused by ar_find_entry_hint() not checking for conversion to st_table - Ruby - Ruby Issue Tracking System
- Bug #22129: error_highlight raises NotImplementedError for ArgumentErrors that get wrapped - Ruby - Ruby Issue Tracking System
- Bug #21864: Inconsistencies in type coercion error messages for integers - Ruby - Ruby Issue Tracking System
- Bug #21882: IO::Buffer#locked leaves the buffer locked when the block raises - Ruby - Ruby Issue Tracking System
- Bug #22127: parse.y regexp crash on invalid encoding - Ruby - Ruby Issue Tracking System
- Bug #22126: Stack underflow for partial DCE and loops - Ruby - Ruby Issue Tracking System
- Bug #22124: void value missed in parse.y - Ruby - Ruby Issue Tracking System
- Bug #22104: Segfault in PRISM while Bootsnap compiles aws-sdk client_api.rb - Ruby - Ruby Issue Tracking System
- Bug #21685: Unnecessary context-switching, especially bad on multi-core machines. - Ruby - Ruby Issue Tracking System
- Bug #22099: Keyword-only method silently accepts a positional argument - Ruby - Ruby Issue Tracking System
- Bug #22183: parse.y interpolation inside lambda literal - Ruby - Ruby Issue Tracking System
- Bug #22181: SEGV in branch peephole optimization due to label/insn struct aliasing - Ruby - Ruby Issue Tracking System
- Bug #22133: Ruby's default SIGINT handling ignores
Thread.handle_interruptmasking. - Ruby - Ruby Issue Tracking System - Bug #22189:
Enumerator::Lazy#to_enumdoes not accept method names as strings - Ruby - Ruby Issue Tracking System - Bug #22191:
Signal.trap(:EXIT)exception only shown ifat_exitalso raises - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.
Full Changelog
Build revision: 4.0.6-1
4.0.6
Ruby 4.0.6 portable binaries
Released by Ruby: 2026-07-14
What's Changed
- Bug #22070:
Thread.each_caller_location(1, 1)segfaults when called from a cfunc - Ruby - Ruby Issue Tracking System - Bug #22075: heap-use-after-free in
rb_vm_ci_lookupunder parallel Ractors - Ruby - Ruby Issue Tracking System - Bug #22076: defined? returns nil for protected methods defined in a module even when callable - Ruby - Ruby Issue Tracking System
- Bug #22072: [BUG] should have cvar cache entry - Ruby - Ruby Issue Tracking System
- Bug #22074: YJIT misaligns locals when there are > 256 local variables - Ruby - Ruby Issue Tracking System
- Bug #22064: GC compaction breaks compare-by-identity sets - Ruby - Ruby Issue Tracking System
- Bug #22084: invokesuper from define_method in Ractor can call wrong super method or crash - Ruby - Ruby Issue Tracking System
- Bug #22092:
Array#sumtakes slow path, does not perform compensated summation of Float elements when init argument is a Float - Ruby - Ruby Issue Tracking System - Bug #14635: Float#round(n) returns a wrong result when n is big - Ruby - Ruby Issue Tracking System
- Bug #22079: Float#ceil gives incorrect result - Ruby - Ruby Issue Tracking System
- Bug #22096: Freeing a mutex locked by a fiber inside fiber scheduler can crash - Ruby - Ruby Issue Tracking System
- Bug #21996: Crash when modifying instance variables during inspect or Marshal dump - Ruby - Ruby Issue Tracking System
- Bug #22101: ASAN heap-use-after-free in rb_data_free after TypedData dfree frees dynamic rb_data_type_t - Ruby - Ruby Issue Tracking System
- Bug #22103: Constant-folded /o regexp crashes with dupstring of a Regexp - Ruby - Ruby Issue Tracking System
- Bug #21991:
$!stays as the first exception in Ruby Box - Ruby - Ruby Issue Tracking System - Feature #21881: Split the root box into the (newer) root box and the master of copied user boxes - Ruby - Ruby Issue Tracking System
- Bug #22120: Segfault caused by ar_find_entry_hint() not checking for conversion to st_table - Ruby - Ruby Issue Tracking System
- Bug #22129: error_highlight raises NotImplementedError for ArgumentErrors that get wrapped - Ruby - Ruby Issue Tracking System
- Bug #21864: Inconsistencies in type coercion error messages for integers - Ruby - Ruby Issue Tracking System
- Bug #21882: IO::Buffer#locked leaves the buffer locked when the block raises - Ruby - Ruby Issue Tracking System
- Bug #22127: parse.y regexp crash on invalid encoding - Ruby - Ruby Issue Tracking System
- Bug #22126: Stack underflow for partial DCE and loops - Ruby - Ruby Issue Tracking System
- Bug #22124: void value missed in parse.y - Ruby - Ruby Issue Tracking System
- Bug #22104: Segfault in PRISM while Bootsnap compiles aws-sdk client_api.rb - Ruby - Ruby Issue Tracking System
- Bug #21685: Unnecessary context-switching, especially bad on multi-core machines. - Ruby - Ruby Issue Tracking System
- Bug #22099: Keyword-only method silently accepts a positional argument - Ruby - Ruby Issue Tracking System
- Bug #22183: parse.y interpolation inside lambda literal - Ruby - Ruby Issue Tracking System
- Bug #22181: SEGV in branch peephole optimization due to label/insn struct aliasing - Ruby - Ruby Issue Tracking System
- Bug #22133: Ruby's default SIGINT handling ignores
Thread.handle_interruptmasking. - Ruby - Ruby Issue Tracking System - Bug #22189:
Enumerator::Lazy#to_enumdoes not accept method names as strings - Ruby - Ruby Issue Tracking System - Bug #22191:
Signal.trap(:EXIT)exception only shown ifat_exitalso raises - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.
Full Changelog
4.0.5-3
Ruby 4.0.5 portable binaries
Released by Ruby: 2026-05-20
What's Changed
- CVE-2026-46727: Use-after-free in pthread-based getaddrinfo timeout handler
- Bug #22065:
make rdocfails withinvalid byte sequence in US-ASCIIon Ruby 4.0.4 under C locale - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.
Full Changelog
Build revision: 4.0.5-3
4.0.5
Ruby 4.0.5 portable binaries
Released by Ruby: 2026-05-20
What's Changed
- CVE-2026-46727: Use-after-free in pthread-based getaddrinfo timeout handler
- Bug #22065:
make rdocfails withinvalid byte sequence in US-ASCIIon Ruby 4.0.4 under C locale - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.
Full Changelog
3.4.10-2
Ruby 3.4.10 portable binaries
Released by Ruby: 2026-06-30
What's Changed
- Bug #21992: Defining BasicObject#initialize causes segmentation fault - Ruby - Ruby Issue Tracking System
- Bug #22004: parse.y doesn't executes loop body with
while true || truecondition - Ruby - Ruby Issue Tracking System - Bug #22018: ISeq created via
RubyVM::InstructionSequence.compiledon't support coverage - Ruby - Ruby Issue Tracking System - Bug #21941: Local variable becomes nil when YJIT enabled mid-method with fork/signal/ensure - Ruby - Ruby Issue Tracking System
- Bug #21947:
Timeout.timeoutdoesn't useTimeout::ExitExceptionwhen Fiber scheduler is in use. - Ruby - Ruby Issue Tracking System - Bug #21847: Backport
syntax_suggest2.0.3 to supported branches - Ruby - Ruby Issue Tracking System - Bug #21880: The ultra_safe mode of pstore bundled with Ruby 4.0 is broken. - Ruby - Ruby Issue Tracking System
- Bug #22070:
Thread.each_caller_location(1, 1)segfaults when called from a cfunc - Ruby - Ruby Issue Tracking System - Bug #21955:
Fiber#transfer: machine stack not released when fiber terminates, causingFiberError: can't set a guard page- Ruby - Ruby Issue Tracking System - Bug #21961: Marshal.load freeze option fail to freeze linked strings - Ruby - Ruby Issue Tracking System
- Bug #21959: rb_internal_thread_event_hooks_rw_lock is not reinitialized after fork causing deadlocks - Ruby - Ruby Issue Tracking System
- Bug #21985: RubyVM::AST negative numbers do not include - in location - Ruby - Ruby Issue Tracking System
- Bug #22017: Backport win32-resolv - Ruby - Ruby Issue Tracking System
- Bug #21927: Prism: misleading error message for forwarding in lambda argument - Ruby - Ruby Issue Tracking System
- Bug #21925: Prism misparses standalone "in" pattern matching in "case/in" - Ruby - Ruby Issue Tracking System
- Bug #21831: Prism doesn't count underscores in the fraction part of rational float - Ruby - Ruby Issue Tracking System
- Bug #21986: RubyVM::AST incorrect location for literals followed by modifier
if- Ruby - Ruby Issue Tracking System - Bug #22003: .bundle extensions not built when doing out-of-source build - Ruby - Ruby Issue Tracking System
- Bug #22002: argument stack underflow (-1) - Ruby - Ruby Issue Tracking System
- Bug #22076: defined? returns nil for protected methods defined in a module even when callable - Ruby - Ruby Issue Tracking System
- Bug #22074: YJIT misaligns locals when there are > 256 local variables - Ruby - Ruby Issue Tracking System
- Bug #22079: Float#ceil gives incorrect result - Ruby - Ruby Issue Tracking System
- Bug #21882: IO::Buffer#locked leaves the buffer locked when the block raises - Ruby - Ruby Issue Tracking System
- Bug #22112: Backport for IO::Buffer USF issues - Ruby - Ruby Issue Tracking System
- Bug #22092:
Array#sumtakes slow path, does not perform compensated summation of Float elements when init argument is a Float - Ruby - Ruby Issue Tracking System - Bug #22101: ASAN heap-use-after-free in rb_data_free after TypedData dfree frees dynamic rb_data_type_t - Ruby - Ruby Issue Tracking System
- Bug #22120: Segfault caused by ar_find_entry_hint() not checking for conversion to st_table - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.
Full Changelog
Build revision: 3.4.10-2
3.4.10
Ruby 3.4.10 portable binaries
Released by Ruby: 2026-06-30
What's Changed
- Bug #21992: Defining BasicObject#initialize causes segmentation fault - Ruby - Ruby Issue Tracking System
- Bug #22004: parse.y doesn't executes loop body with
while true || truecondition - Ruby - Ruby Issue Tracking System - Bug #22018: ISeq created via
RubyVM::InstructionSequence.compiledon't support coverage - Ruby - Ruby Issue Tracking System - Bug #21941: Local variable becomes nil when YJIT enabled mid-method with fork/signal/ensure - Ruby - Ruby Issue Tracking System
- Bug #21947:
Timeout.timeoutdoesn't useTimeout::ExitExceptionwhen Fiber scheduler is in use. - Ruby - Ruby Issue Tracking System - Bug #21847: Backport
syntax_suggest2.0.3 to supported branches - Ruby - Ruby Issue Tracking System - Bug #21880: The ultra_safe mode of pstore bundled with Ruby 4.0 is broken. - Ruby - Ruby Issue Tracking System
- Bug #22070:
Thread.each_caller_location(1, 1)segfaults when called from a cfunc - Ruby - Ruby Issue Tracking System - Bug #21955:
Fiber#transfer: machine stack not released when fiber terminates, causingFiberError: can't set a guard page- Ruby - Ruby Issue Tracking System - Bug #21961: Marshal.load freeze option fail to freeze linked strings - Ruby - Ruby Issue Tracking System
- Bug #21959: rb_internal_thread_event_hooks_rw_lock is not reinitialized after fork causing deadlocks - Ruby - Ruby Issue Tracking System
- Bug #21985: RubyVM::AST negative numbers do not include - in location - Ruby - Ruby Issue Tracking System
- Bug #22017: Backport win32-resolv - Ruby - Ruby Issue Tracking System
- Bug #21927: Prism: misleading error message for forwarding in lambda argument - Ruby - Ruby Issue Tracking System
- Bug #21925: Prism misparses standalone "in" pattern matching in "case/in" - Ruby - Ruby Issue Tracking System
- Bug #21831: Prism doesn't count underscores in the fraction part of rational float - Ruby - Ruby Issue Tracking System
- Bug #21986: RubyVM::AST incorrect location for literals followed by modifier
if- Ruby - Ruby Issue Tracking System - Bug #22003: .bundle extensions not built when doing out-of-source build - Ruby - Ruby Issue Tracking System
- Bug #22002: argument stack underflow (-1) - Ruby - Ruby Issue Tracking System
- Bug #22076: defined? returns nil for protected methods defined in a module even when callable - Ruby - Ruby Issue Tracking System
- Bug #22074: YJIT misaligns locals when there are > 256 local variables - Ruby - Ruby Issue Tracking System
- Bug #22079: Float#ceil gives incorrect result - Ruby - Ruby Issue Tracking System
- Bug #21882: IO::Buffer#locked leaves the buffer locked when the block raises - Ruby - Ruby Issue Tracking System
- Bug #22112: Backport for IO::Buffer USF issues - Ruby - Ruby Issue Tracking System
- Bug #22092:
Array#sumtakes slow path, does not perform compensated summation of Float elements when init argument is a Float - Ruby - Ruby Issue Tracking System - Bug #22101: ASAN heap-use-after-free in rb_data_free after TypedData dfree frees dynamic rb_data_type_t - Ruby - Ruby Issue Tracking System
- Bug #22120: Segfault caused by ar_find_entry_hint() not checking for conversion to st_table - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.
Full Changelog
3.3.11-5
Ruby 3.3.11 portable binaries
Released by Ruby: 2026-03-26
What's Changed
- Bug #21625: Allow IO#wait_readable together with IO#ungetc even in text mode - Ruby - Ruby Issue Tracking System
- Fix indents in Onigmo files to use spaces instead of tabs by makenowjust · Pull Request #14047
- Bug #13671: Regexp with lookbehind and case-insensitivity raises RegexpError only on strings with certain characters - Ruby - Ruby Issue Tracking System
- Bug #21560: RUBY_MN_THREADS=1 causes large performance regression in Puma 7 - Ruby - Ruby Issue Tracking System
- Bug #21668: Backport 6cc66469a007d2fb272397e5e27c20b4ce628f5e - Ruby - Ruby Issue Tracking System
- Bug #21652: Marshal#dump documentation out-of-date/unclear regarding Data class - Ruby - Ruby Issue Tracking System
- Bug #21673: Segmentation Fault in IRB when refining
Kernel#putsusingModule#refine(Regression since Ruby 3.4) - Ruby - Ruby Issue Tracking System - Bug #21655: segfault when building 3.3.10 with GCC 15.2.1, regression from 3.3.9 - Ruby - Ruby Issue Tracking System
- Bug #21666: Math.lgamma(-1).should == [infinity_value, 1] fails with Fedora glibc-2.42.9000-8.fc44 - Ruby - Ruby Issue Tracking System
- Bug #21680: Integer#digits bug starting from Ruby 3.1 - Ruby - Ruby Issue Tracking System
- Bug #21705:
UNIXServer.open(nil)segfaults on Windows - Ruby - Ruby Issue Tracking System - Bug #21715: Miscompilation on x86-64-v2 due to undefined behavior in search_nonascii in string.c - Ruby - Ruby Issue Tracking System
- Bug #21860: Process.fork: the child may deadlock on
th->interrupt_lockinthreadptr_interrupt_exec_cleanup- Ruby - Ruby Issue Tracking System - Bug #21873:
UnboundMethod#==returns false for methods from included/extended modules - Ruby - Ruby Issue Tracking System - Bug #21931: GC Crash in
String#%(backport 726205b354d1068147719fb42e1de743f1838ef1) - Ruby - Ruby Issue Tracking System - Bug #21266: YJIT GC safety crash with proc objects as block argument - Ruby - Ruby Issue Tracking System
- Bug #21847: Backport
syntax_suggest2.0.3 to supported branches - Ruby - Ruby Issue Tracking System - Bug #21959: rb_internal_thread_event_hooks_rw_lock is not reinitialized after fork causing deadlocks - Ruby - Ruby Issue Tracking System
- Bug #21703: RUBY_CRASH_REPORT does not work when shelling out in some cases - Ruby - Ruby Issue Tracking System
- Bug #21446: StackOverflow when changing visibility in reopened refinement - Ruby - Ruby Issue Tracking System
- Bug #21779: Do not export functions from statically linked extensions - Ruby - Ruby Issue Tracking System
- Bug #21811: Fix underflow in Array#pack - Ruby - Ruby Issue Tracking System
- Bug #21814: 0.pow(2,-9999999999999999990) should be zero - Ruby - Ruby Issue Tracking System
- Bug #21819: A Data object should be frozen even if it has no members - Ruby - Ruby Issue Tracking System
- Bug #21961: Marshal.load freeze option fail to free linked strings - Ruby - Ruby Issue Tracking System
- Feature #16495: Inconsistent quotes in error messages - Ruby - Ruby Issue Tracking System
- Bug #21880: The ultra_safe mode of pstore bundled with Ruby 4.0 is broken. - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.
Full Changelog
Build revision: 3.3.11-5
3.3.11
Ruby 3.3.11 portable binaries
Released by Ruby: 2026-03-26
What's Changed
- Bug #21625: Allow IO#wait_readable together with IO#ungetc even in text mode - Ruby - Ruby Issue Tracking System
- Fix indents in Onigmo files to use spaces instead of tabs by makenowjust · Pull Request #14047
- Bug #13671: Regexp with lookbehind and case-insensitivity raises RegexpError only on strings with certain characters - Ruby - Ruby Issue Tracking System
- Bug #21560: RUBY_MN_THREADS=1 causes large performance regression in Puma 7 - Ruby - Ruby Issue Tracking System
- Bug #21668: Backport 6cc66469a007d2fb272397e5e27c20b4ce628f5e - Ruby - Ruby Issue Tracking System
- Bug #21652: Marshal#dump documentation out-of-date/unclear regarding Data class - Ruby - Ruby Issue Tracking System
- Bug #21673: Segmentation Fault in IRB when refining
Kernel#putsusingModule#refine(Regression since Ruby 3.4) - Ruby - Ruby Issue Tracking System - Bug #21655: segfault when building 3.3.10 with GCC 15.2.1, regression from 3.3.9 - Ruby - Ruby Issue Tracking System
- Bug #21666: Math.lgamma(-1).should == [infinity_value, 1] fails with Fedora glibc-2.42.9000-8.fc44 - Ruby - Ruby Issue Tracking System
- Bug #21680: Integer#digits bug starting from Ruby 3.1 - Ruby - Ruby Issue Tracking System
- Bug #21705:
UNIXServer.open(nil)segfaults on Windows - Ruby - Ruby Issue Tracking System - Bug #21715: Miscompilation on x86-64-v2 due to undefined behavior in search_nonascii in string.c - Ruby - Ruby Issue Tracking System
- Bug #21860: Process.fork: the child may deadlock on
th->interrupt_lockinthreadptr_interrupt_exec_cleanup- Ruby - Ruby Issue Tracking System - Bug #21873:
UnboundMethod#==returns false for methods from included/extended modules - Ruby - Ruby Issue Tracking System - Bug #21931: GC Crash in
String#%(backport 726205b354d1068147719fb42e1de743f1838ef1) - Ruby - Ruby Issue Tracking System - Bug #21266: YJIT GC safety crash with proc objects as block argument - Ruby - Ruby Issue Tracking System
- Bug #21847: Backport
syntax_suggest2.0.3 to supported branches - Ruby - Ruby Issue Tracking System - Bug #21959: rb_internal_thread_event_hooks_rw_lock is not reinitialized after fork causing deadlocks - Ruby - Ruby Issue Tracking System
- Bug #21703: RUBY_CRASH_REPORT does not work when shelling out in some cases - Ruby - Ruby Issue Tracking System
- Bug #21446: StackOverflow when changing visibility in reopened refinement - Ruby - Ruby Issue Tracking System
- Bug #21779: Do not export functions from statically linked extensions - Ruby - Ruby Issue Tracking System
- Bug #21811: Fix underflow in Array#pack - Ruby - Ruby Issue Tracking System
- Bug #21814: 0.pow(2,-9999999999999999990) should be zero - Ruby - Ruby Issue Tracking System
- Bug #21819: A Data object should be frozen even if it has no members - Ruby - Ruby Issue Tracking System
- Bug #21961: Marshal.load freeze option fail to free linked strings - Ruby - Ruby Issue Tracking System
- Feature #16495: Inconsistent quotes in error messages - Ruby - Ruby Issue Tracking System
- Bug #21880: The ultra_safe mode of pstore bundled with Ruby 4.0 is broken. - Ruby - Ruby Issue Tracking System
Note: This list is automatically generated by tool/gen-github-release.rb. Because of this, some commits may be missing.