Project

General

Profile

Activity

From 08/24/2026 to 08/30/2026

Today

10:04 PM Bug #20243 (Open): M:N threading VM_ASSERT failure in rb_current_execution_context with clang 17 (on Linux)
Thank you, I understand now.
When I said “the issue,” I was referring to the problem where Ruby crashes when built with Clang 17 and `-DVM_CHECK_MODE=1`.
However, I now realize that this issue does not address that specific case, but r...
wanabe (_ wanabe)
07:29 PM Revision 3aa34522 (git): [ruby/timeout] Exclude the gemspec from packaged files
https://github.com/ruby/timeout/commit/72a3743ec4 Oskar Eichler
05:21 PM Revision aa33db69 (git): Pass the buffer's size to ruby_xrealloc_sized, not the field distance
rb_econv_insert_output() grew the insertion buffer with
ruby_xrealloc_sized(*buf_start_p, s, buf_end_p - buf_start_p);
The old-size argument subtracts the two local pointer variables instead
of the pointers they point at, so the al...
ko1 (Koichi Sasada)
05:21 PM Revision 6804adde (git): Keep the fallback string alive across rb_econv_insert_output
transcode_loop() passed the fallback result to rb_econv_insert_output()
as a bare pointer and length. Nothing roots the string during that call:
args.rep still holds the pre-fallback error-bytes string, and with
clang -O3 the VALUE itse...
ko1 (Koichi Sasada)
01:43 PM Bug #20917: redo/next in nested begin block causes wrong order of execution
I simplified the script to make it easier to read in ISEQ.
```
1.times do
begin
redo
ensure
end
ensure
puts 1
break
end
```
```
$ ./miniruby -v --dump=insn a.rb
ruby 4.1.0dev (2026-08-30T06:52:45Z :detache...
wanabe (_ wanabe)
10:19 AM Bug #22268: Backport resolv security fixes (CVE-2026-80212, CVE-2026-80213)
Thank you for creating PR. merged into ruby_3_4 at commit:6deacfb8275bd1583ffa1b8c2b87f25484586a91. nagachika (Tomoyuki Chikanaga)
10:18 AM Revision 6deacfb8 (git): Bump up resolv-0.7.2 for Ruby 3.4
Backport of the August 2026 resolv security release.
CVE-2026-80212
CVE-2026-80213
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
06:52 AM Revision a889da90 (git): ZJIT: Remove WriteBarrier for immediates
It doesn't end up generating any code (we catch this in codegen too) but
we might as well not have the instruction lying around in our IR.
Max Bernstein
06:52 AM Revision 4068011d (git): ZJIT: Fold BoxBool(Test(cond:BoolExact)) to cond
This appears when doing e.g. `l & (a == b)` (as in the included new
test) where `TrueClass#&` does `RTEST(RBOOL(rhs))` and then the right
hand side is already known to be returning a `BoolExact` because it's
from `FixnumEq`.
Max Bernstein
06:52 AM Revision 6ce41703 (git): ZJIT: Add line numbers to Perfetto traces
This helps figure out what part of long functions is causing the exit or
fallback or whatever is being traced.
Max Bernstein
06:52 AM Revision b6071e1e (git): ZJIT: Specialize TrueClass#&
It just does `RBOOL(RTEST(other))`. Max Bernstein
06:52 AM Revision e5cd8f00 (git): ZJIT: Specialize FalseClass#&
It just returns `false` no matter the other argument. Max Bernstein
06:52 AM Revision 0f20fd9f (git): ZJIT: Support generating Const::CBool in codegen
Max Bernstein
06:50 AM Revision f20155d5 (git): marshal.c: Make partial objects table conditional
Only allocate and use the partial objects table when a load proc is active or loaded objects must be frozen.
Co-authored-by: Codex <noreply@openai.com>
Roman Samoilov
06:27 AM Revision ce15950f (git): thread_sched: keep io fds registered in epoll with EPOLLONESHOT
A blocking read used to cost four epoll_ctl per wait cycle: ADD before
the wait and DEL after the wake, on both ends of an exchange. The DEL
ran on the timer thread, the one serial resource every io readiness
event already passes throug...
ko1 (Koichi Sasada)

08/29/2026

01:05 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
+1, Kevin has a lot of experience with String semantics and optimizations, as well as with implementing & JIT-compiling many parts of Ruby, he would be a great committer. Eregon (Benoit Daloze)
06:49 AM Bug #22269 (Closed): `Coverage.line_stub` clobbers already-collected coverage data
Applied in changeset commit:git|22e4a75d67d1e25deed4dce5b801397713dbdefa.
----------
[Bug #22269] Make coverage_enabled: false effective for compile/compile_file
Use it in Coverage.line_stub so compiling the stub does not overwrite alr...
mugikurash (Shuta Mugikura)
06:48 AM Revision 22e4a75d (git): [Bug #22269] Make coverage_enabled: false effective for compile/compile_file
Use it in Coverage.line_stub so compiling the stub does not overwrite already-collected coverage data. mugikurash (Shuta Mugikura)
05:51 AM Misc #22249: DevMeeting-2026-09-10
* [Feature #22279] Region (Length / Range) Arguments for String Bit Operations (hasumikin)
* Follow-up to [Feature #22118] (String bit operations, accepted): adds `(offset, length)` and Range overloads to `bit_set` / `bit_clear`...
hasumikin (hitoshi hasumi)
05:29 AM Feature #22279 (Open): Region (Length / Range) Arguments for String Bit Operations
PR URL: https://github.com/ruby/ruby/pull/18562
## What this adds
Region overloads for the methods introduced in #22118, so they act on a contiguous run of bits in a single call:
```
String#bit_set(offset, length, lsb_first: tr...
hasumikin (hitoshi hasumi)
05:17 AM Revision fcbdc207 (git): Dynamically derive base_label in iseq
base_label isn't used very often in iseq and we can dynamically derive it
from the label (of the current iseq or the local_iseq). We can remove this
field to save 8 bytes.
peterzhu2118 (Peter Zhu)
03:15 AM Revision e947cbd1 (git): Regenerate build dependencies after revision changes
ydah (Yudai Takada)
01:04 AM Revision a7361d3e (git): [DOC] Harmonize chmod methods doc
burdettelamar (Burdette Lamar)
01:02 AM Revision 25ab32c7 (git): [DOC] Tweak for filesystem_modes.md
burdettelamar (Burdette Lamar)

08/28/2026

11:19 PM Bug #22246: Rational#to_f incorrectly rounds when the numerator is a bignum that cannot be represented exactly by a double, and the denominator is a fixnum
I found two more cases where `rb_big_fdiv_double` produces an incorrectly rounded result. I added them to [pull request #18599](https://github.com/ruby/ruby/pull/18559).
```Ruby
assert_equal(3.333333333333333e39, (10**40).fdiv(3), "Bug...
rgburger (Robert Burger)
07:04 PM Revision 90e729c9 (git): Share one thread/ractor scheduler between POSIX and Windows
Windows carried a second, much weaker scheduler: a single Win32 mutex as
the GVL, vm->clock for preemption, its own VM barrier over
vm->ractor.sync.barrier_*, its own Ractor wait/wakeup on a per-Ractor
condvar, no ready queue and no time...
ko1 (Koichi Sasada)
05:02 PM Bug #22263: NoMethodError: super: no superclass method 'require' for main — raised in a forked child process after a Ractor has exited in the parent (bisected to c59c4d717a)
I've just encountered this issue with the following repro:
```
Ractor.new { 1 }.value
Kernel.module_eval { alias old_require require }
old_require 'tempfile'
```
Thanks @luke-gru for pointing this ticket out to me.
I ended u...
eightbitraptor (Matt V-H)
04:30 PM Revision 46e53809 (git): [ruby/date] Implement compaction and embedded structs
Currently dates are allocated in a 40B slot plus a 32B (simple)
or 48B (complex) external struct.
Once embedded they entirely fit into a 80B slot.
https://github.com/ruby/date/commit/e8a1442c60
byroot (Jean Boussier)
04:00 PM Revision 89719849 (git): [ruby/date] Assert warnings for invalid offsets
https://github.com/ruby/date/commit/569565d8c0 sjh9714
04:00 PM Revision c84cb4d4 (git): [ruby/date] Range-check the integral Rational offset
Every branch of offset_to_sec range-checks the resulting number of
seconds except one path through the Rational branch: when the day
fraction is an integral Rational, n is assigned inside the if arm and
reaches *rof without passing the g...
sjh9714
03:58 PM Revision 2084db2e (git): [ruby/date] Validate the commercial week range before conversion
Reject week numbers outside -53..-1 and 1..53 before conversion so
integer overflow cannot make invalid input appear valid.
Fixes https://github.com/ruby/date/pull/180.
https://github.com/ruby/date/commit/e9c07010c7
nobu (Nobuyoshi Nakada)
03:58 PM Revision b95de2b9 (git): [ruby/date] Preserve input encoding when parsing time zones
Pass the input encoding through `date__strptime` so non-ASCII trailing
data is treated as a parse failure instead of raising an encoding error.
Fixes https://github.com/ruby/date/pull/179.
https://github.com/ruby/date/commit/edf7cf016c
nobu (Nobuyoshi Nakada)
02:14 PM Bug #22018: ISeq created via `RubyVM::InstructionSequence.compile` don't support coverage
I found an unintended interaction with `Coverage.line_stub` after this change: calling `line_stub` while coverage is running can reset already-collected coverage counters.
I opened #22269 for this issue:
https://bugs.ruby-lang.org/is...
mugikurash (Shuta Mugikura)
01:23 PM Revision 16de6937 (git): Remove wrapper field in iseq
We keep a singleton of iseq wrappers (RubyVM::InstructionSequence). However,
this is rarely used and causes 8 bytes to be wasted on all iseq objects.
Since we now have the 32-byte slot size in the default GC, we can save that
memory.
peterzhu2118 (Peter Zhu)
01:22 PM Bug #22278 (Open): `Coverage.line_stub` emits warnings found in source code
`Coverage.line_stub` is implemented via `RubyVM::InstructionSequence.compile_file`. That emits all warnings found in the source code when `$VERBOSE = true`.
I found this via `simplecov`. It can do coverage for compiled erb, and it als...
Earlopain (Earlopain _)
12:55 PM Bug #22276: alias in a module falls back to Object even in classes not inheriting from Object
I implemented option 2: https://github.com/ruby/ruby/pull/18553
When `alias` in a module does not find the method in the module, it now creates a ZSUPER method entry whose original name is the aliased method. `Object` is searched only t...
shugo (Shugo Maeda)
09:55 AM Bug #22276 (Open): alias in a module falls back to Object even in classes not inheriting from Object
When `alias` (or `alias_method`) is used in a module and the method is not found in the module, `alias` searches the method from `Object`. So a module can alias a method of `Kernel` or `Object`, and the alias works even if the module is ... shugo (Shugo Maeda)
12:48 PM Feature #22277 (Open): Make `rb_gc_register_address` Ractor-local
## Summary
[Github PR #18393](https://github.com/ruby/ruby/pull/18393)
`rb_gc_register_address` stores its entries in a single VM-wide list. This means that every Ractor local GC walks the list under a VM wide lock, which causes co...
eightbitraptor (Matt V-H)
10:53 AM Revision 7af12706 (git): [ruby/date] Suppress warnings by clang 21
https://bugs.ruby-lang.org/issues/21629
https://github.com/ruby/date/commit/214024627a
nobu (Nobuyoshi Nakada)
09:33 AM Bug #22273: Aliasing doesn't interact well with Module#prepend
I agree with Jeremy, and would like to point out that Ruby already has exactly this semantics for refinements.
If the prepend in the example is replaced with a refinement, we get the expected behavior:
```ruby
using Module.new {
...
shugo (Shugo Maeda)
05:03 AM Bug #22273: Aliasing doesn't interact well with Module#prepend
As I mentioned in https://bugs.ruby-lang.org/issues/22263#note-5, I think a module should only be able to alias methods in ancestor modules, it should not be able to alias methods in descendant modules, as I don't think the semantics mak... jeremyevans0 (Jeremy Evans)
08:05 AM Misc #22275 (Open): Ruby::Box support plan for RubyGems and Bundler
This is a tracking issue for making RubyGems and Bundler work with Ruby::Box, so that reviewers can see the whole picture and what to look at next in one place.
## Goal
The goal is to realize [Feature #13847](https://bugs.ruby-lang...
hsbt (Hiroshi SHIBATA)
07:56 AM Bug #22173 (Closed): `Ractor.new { Fiber.current }.value` raises `[BUG] rb_ractor_confirm_belonging object-ractor id:1, current-ractor id:2`
Thank you for the report! ko1 (Koichi Sasada)
07:43 AM Revision 69b49ac7 (git): hash.c: avoid signed integer overflow in ar_hint_first_match SWAR splat
This was previously flagged by ubsan because the AR_HINT_BASE_MASK
constant is implicitly typed as long:
hash.c:664:43: runtime error: signed integer overflow: 72340172838076673
* 131 cannot be represented in type 'long'
Notably, in an...
Mrmaxmeier
07:04 AM Revision a3f47303 (git): parse.y: fix high nibble in invalid byte escapes
ydah (Yudai Takada)
05:47 AM Revision ed55edaa (git): Avoid freezing nested array in Array#flatten!
ydah (Yudai Takada)
04:27 AM Revision 19db053a (git): Fix use-after-free of rb_thread_t in the M:N termination epilogue
coroutine_thread_terminated() leaves the Ractor's living set before handing
the scheduler slot over, then keeps using th for the rest of the function:
thread_sched_to_dead_common() reads th->nt and deregisters th from the
barrier, and th...
ko1 (Koichi Sasada)
02:25 AM Revision 8f3d12f7 (git): Install MSYS2 perl on the MinGW runner
MSYS2 dropped perl from its base install and the windows-2022 runner
image picked that up in 20260818.277.1, so autogen.sh now dies with
`/usr/bin/perl: bad interpreter`. master and ruby_4_0 set up their own
MSYS2 with autoconf, which pu...
hsbt (Hiroshi SHIBATA)
02:25 AM Revision e675ccc0 (git): Install MSYS2 perl on the MinGW runner
MSYS2 dropped perl from its base install and the windows-2022 runner
image picked that up in 20260818.277.1, so autogen.sh now dies with
`/usr/bin/perl: bad interpreter`. master and ruby_4_0 set up their own
MSYS2 with autoconf, which pu...
hsbt (Hiroshi SHIBATA)
02:25 AM Revision 619ea0f6 (git): Bump up resolv-0.3.2 for Ruby 3.3
Backport of the August 2026 resolv security release.
CVE-2026-80212
CVE-2026-80213
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
02:15 AM Revision 7dec7a2a (git): Fix assert_not_include typo in test_box.rb
test_global_variables called nonexistent assert_not_include?, raising
NoMethodError when the suite runs with RUBY_BOX=1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
01:49 AM Revision b414f282 (git): [Misc #22206] Sync dependency files from default gems
Keep complete dependency rules in upstream gems while storing only source
mappings in the Ruby repository.
nobu (Nobuyoshi Nakada)
01:49 AM Revision 67addc08 (git): [Misc #22206] Keep generated dependency duplicates
Keep generated rules even when manual rules cover them so source
mappings can round-trip between default gems and ruby/ruby.
nobu (Nobuyoshi Nakada)
01:18 AM Bug #22090: Enabling Ruby::Box breaks Marshal.load
The root cause is that `Marshal.load` is a builtin method written in Ruby (`marshal.rb`), so it is defined in the master box. The box resolution stops at that frame and looks up the dumped class names there, where user-defined classes ar... hsbt (Hiroshi SHIBATA)
12:36 AM Revision 888a9fe2 (git): [ruby/rubygems] Document :credential_store in the gemrc option list
The option has been readable from gemrc since it was added, but the RDoc
list of valid gemrc options never gained a row for it.
https://github.com/ruby/rubygems/commit/3521da48ae
Hiroshi SHIBATA
12:35 AM Revision ed0519b7 (git): [ruby/rubygems] Only coerce exact true and false gemrc values to booleans
Alternation binds looser than the anchors, so `/\Atrue|false\Z/` reads as
`(\Atrue)|(false\Z)` and quietly turned every gemrc string starting with
`true` or ending with `false` into the boolean false. `:credential_store:
truestore` disab...
hsbt (Hiroshi SHIBATA)
12:29 AM Revision f6c8c1f7 (git): [ruby/rubygems] Keep the credential_store vocabulary lists private
They sit after `private`, which does not apply to constants, so both are
public API today. Nothing outside the file reads them, and the setting
has not shipped, so this is the last release where making them private
costs nothing.
https:...
hsbt (Hiroshi SHIBATA)
12:29 AM Revision 9c8e1e5d (git): [ruby/rubygems] Record why the RubyGems half keeps `off`
The two sides of one setting now disagree on `off`, so the list has to
say why it stays wider here. Nothing on the way in turns `off` into a
boolean, and nothing on this side shares the single vocabulary that
Bundler's boolean settings a...
hsbt (Hiroshi SHIBATA)
12:29 AM Revision 7c3a23a0 (git): [ruby/rubygems] Align the credential_store false vocabulary with to_bool
`credential_store` was the only Bundler setting that read `off` as
disabled, while every other setting goes through `Settings#to_bool`,
whose false vocabulary has never had it. The disabled branch now
delegates to `#to_bool` so the two c...
hsbt (Hiroshi SHIBATA)

08/27/2026

11:37 PM Revision 5eb9a692 (git): [ruby/rubygems] Keep lockfile parsing from loading Bundler source plugins
A PLUGIN SOURCE section sends Bundler::Plugin.from_lock looking for the
plugin that handles it, and finding one loads and runs that plugin's
`plugins.rb`. The plugin index is read from the lockfile directory, so a
repository could run co...
hsbt (Hiroshi SHIBATA)
11:37 PM Revision 660aa1a2 (git): [ruby/rubygems] Do not restore Bundler root when it was never saved
`defined?(previous_root)` is true even when the assignment never ran, so
a failure before the root was saved reset Bundler's root to nil.
https://github.com/ruby/rubygems/commit/b2177cd67d
Co-Authored-By: Claude Fable 5 <noreply@anthro...
hsbt (Hiroshi SHIBATA)
11:37 PM Revision 99d127e5 (git): [ruby/rubygems] Restore lockfile remote order for GEM sections
Bundler::Source::Rubygems stores remotes in reverse of the lockfile
order, so reading them straight through flipped which remote a spec
downloads from when a GEM section lists more than one.
https://github.com/ruby/rubygems/commit/da017...
hsbt (Hiroshi SHIBATA)
11:37 PM Revision 11d8ba65 (git): [ruby/rubygems] Pin lockfile dependencies to the version their section resolved
The parser removed in #9564 turned a `!` entry in the DEPENDENCIES
section into a `= <version>` requirement. Bundler's LockfileParser
records the pinned source on the dependency and leaves the requirement
at `>= 0`, so `gem install -g` c...
hsbt (Hiroshi SHIBATA)
11:26 PM Revision e722f446 (git): [ruby/io-console] Add Windows console constants
Merge the unmerged dependency update at the previous merger.
https://github.com/ruby/io-console/commit/e712668ca2
nobu (Nobuyoshi Nakada)
11:19 PM Revision ca40db6d (git): [ruby/rubygems] Relativize a plugin path only when it is really under the root
The save side matched the root as a string prefix, so an absolute path
that starts with the root but climbs above it was written back relative,
and the filter above then dropped it on the next load. Asking the same
question both ways lea...
hsbt (Hiroshi SHIBATA)
11:19 PM Revision 25f520c9 (git): [ruby/rubygems] Ignore plugin index entries that point outside the plugin root
A path stored relative to the plugin root only means anything inside it,
so an entry that climbs out of it did not come from a plugin Bundler
installed there. Paths recorded as absolute are left alone, which is how
`bundle plugin install...
hsbt (Hiroshi SHIBATA)
11:15 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
+1 Kevin's got a lot of experience with TruffleRuby that can help improve CRuby peterzhu2118 (Peter Zhu)
11:00 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
+1.
> He's made significant contributions to ZJIT. Having Kevin as a committer would help the ZJIT development a lot.
Yes, it would be great if he can merge patches
tenderlovemaking (Aaron Patterson)
04:41 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
+1 Kevin is a very experienced and thoughtful developer. He'd be a great asset to the CRuby committers. eightbitraptor (Matt V-H)
04:34 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
Thank you for the nomination, @tekknolagi, and the support from others. I'd be honored to accepted as a committer. nirvdrum (Kevin Menard)
04:32 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
+1 Kevin would be a great addition kddnewton (Kevin Newton)
04:18 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
+1 st0012 (Stan Lo)
04:05 PM Misc #22272: Propose Kevin Menard (@nirvdrum) as a core committer
+1. He's made significant contributions to ZJIT. Having Kevin as a committer would help the ZJIT development a lot. k0kubun (Takashi Kokubun)
03:11 PM Misc #22272 (Open): Propose Kevin Menard (@nirvdrum) as a core committer
## Proposal
I'd like to propose Kevin Menard (@nirvdrum) as a committer. He started full-time work on ZJIT about a year ago and has been doing excellent work since. For example, he wrote the function inliner, which is the single bigge...
tekknolagi (Maxwell Bernstein)
11:10 PM Revision 91582950 (git): Unify jit_payload in iseq_constant_body
We cannot have YJIT and ZJIT enabled at the same time, so we can use a
single jit_payload pointer in iseq_constant_body to reduce the size by
8 bytes.
peterzhu2118 (Peter Zhu)
11:10 PM Revision ae55fbba (git): [DOC] New file about filesystem modes (#18521)
burdettelamar (Burdette Lamar)
09:17 PM Feature #22274 (Open): Make `IO::Buffer` no longer experimental.
`IO::Buffer` was introduced in Ruby 3.1 by Feature #18020 as an experimental API. It provides an efficient buffer abstraction for fiber scheduler I/O, zero-copy operations, binary protocol implementations, and access from native extensio... ioquatix (Samuel Williams)
07:07 PM Revision f4813a34 (git): compile.c: statically resolve `swap` instructions when possible
If the two preceeding instructions are known not to be dependent
on the state of the stack, then we can eliminate the `swap` and inverse
the two previous instructions.
This mostly eliminate instruction in two cases:
```ruby
Object.new
...
byroot (Jean Boussier)
06:24 PM Bug #22273 (Open): Aliasing doesn't interact well with Module#prepend
Currently, aliasing doesn't interact well with `Module#prepend` in my opinion.
### Example
```ruby
module Kernel
prepend(Module.new do
def require(feature)
puts "requiring feature (prepend): #{feature}"
super...
luke-gru (Luke Gruber)
06:03 PM Bug #22246: Rational#to_f incorrectly rounds when the numerator is a bignum that cannot be represented exactly by a double, and the denominator is a fixnum
Here's an example of Rational#to_f giving an incorrect result when the numerator is a bignum and the denominator is a fixnum that can't be exactly represented as a double:
`Rational(10**24, 10**17 + 9).to_f` should return 10000000.0, but...
rgburger (Robert Burger)
01:57 PM Bug #22246: Rational#to_f incorrectly rounds when the numerator is a bignum that cannot be represented exactly by a double, and the denominator is a fixnum
Consider the related code in `fix_fdiv_double`, which demonstrates a check for the denominator y being a fixnum that's exactly represented by a double.
```
static double
fix_fdiv_double(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
...
rgburger (Robert Burger)
01:47 PM Bug #22246: Rational#to_f incorrectly rounds when the numerator is a bignum that cannot be represented exactly by a double, and the denominator is a fixnum
> This bug is not related to Feature #21308 except for the same author.
Yes, I confused it with another ticket, that's why I deleted my comment, sorry.
byroot (Jean Boussier)
01:13 PM Bug #22246: Rational#to_f incorrectly rounds when the numerator is a bignum that cannot be represented exactly by a double, and the denominator is a fixnum
This bug is not related to Feature #21308 except for the same author. The implementation of Rational#to_f does not perform any base conversions.
The bug is caused by the assumption that a floating-point conversion of a bignum numerator ...
rgburger (Robert Burger)
04:56 PM Revision 12e5584d (git): [ruby/prism] Warn on duplicated key with **hash only
Previously we were just checking the token, which meant something
like `{ a: 1, **{a: 2}.select { false } }` would warn. As esoteric
as this is, it was possible. This also happily gets rid of the
current_hash_keys field on parser, making...
kddnewton (Kevin Newton)
04:44 PM Revision 643171f1 (git): [ruby/open3] Close Open3 pipes when spawn exits early
Prevent file descriptor leaks when process creation exits through an
exception or throw.
https://github.com/ruby/open3/commit/8f5d4b6ae0
nobu (Nobuyoshi Nakada)
03:14 PM Bug #22268 (Closed): Backport resolv security fixes (CVE-2026-80212, CVE-2026-80213)
k0kubun (Takashi Kokubun)
04:04 AM Bug #22268 (Closed): Backport resolv security fixes (CVE-2026-80212, CVE-2026-80213)
The resolv security releases of 2026-08-27 fix CVE-2026-80212 and CVE-2026-80213. https://www.ruby-lang.org/en/news/2026/08/27/multiple-vulnerabilities-in-resolv/
`resolv` is a default gem. master already has the fixes through the aut...
hsbt (Hiroshi SHIBATA)
03:13 PM Revision 2da9a6ef (git): Bump up resolv-0.7.2 for Ruby 4.0
Backport of the August 2026 resolv security release.
CVE-2026-80212
CVE-2026-80213
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
12:56 PM Bug #19865: Segfault when calling user signal handlers during VM shutdown
I've just been analysing these recurring segfaults happening from time to time and landed on the bug report. The same combo stands: ruby-odbc and a connected db object at shutdown. Looking forward to a fix. chucke (Tiago Cardoso)
12:15 PM Bug #21830: Ruby::Box and Kernel#require
Thanks @hsbt.
For the archives, I'd like to add something to
> This breaks Zeitwerk's implicit namespaces
The main idea in Zeitwerk is:
1. Scan the filesystem
2. Set autoloads accordingly
3. React to constants being autolod...
fxn (Xavier Noria)
10:14 AM Bug #21830: Ruby::Box and Kernel#require
The direct `Kernel#require` decoration now works on master (after #21881), but the autoload path is still broken: an autoload fired under `RUBY_BOX=1` bypasses the decorated `require` entirely.
```ruby
module M
def require(path)
i...
hsbt (Hiroshi SHIBATA)
11:57 AM Revision 14a257cf (git): Combine items, keys, collision_table in rb_id_table
peterzhu2118 (Peter Zhu)
11:57 AM Revision aa30b601 (git): Reduce memory usage of rb_id_table
On 64-bit systems, we used 4 bytes to determine if there is a collision
in the entry. This is a waste because it only needs 1 bit.
This commit separates each item in rb_id_table into three parts: items
(8 byte elements), keys (4 byte el...
peterzhu2118 (Peter Zhu)
11:11 AM Bug #22271 (Open): Ruby::Box fails to load C extensions from deep paths (temporary file name exceeds NAME_MAX)
When a C extension is required inside a Ruby::Box, the temporary copy is named by flattening the full source path into a single file name (`/` replaced with `+`). If the extension lives under a deep path, such as a long `BUNDLE_PATH`, th... hsbt (Hiroshi SHIBATA)
10:37 AM Bug #22270 (Open): Fix prepend ancestry order in user boxes
In a user box created with gems disabled, prepending to a built-in module inserts it on the wrong side of the target:
```ruby
box = Ruby::Box.new
box.eval('module BoxDecor; end; Kernel.prepend(BoxDecor)')
box.eval('Object.ancestors...
hsbt (Hiroshi SHIBATA)
10:35 AM Feature #15381: Let double splat call `to_h` implicitly
Hi,
I’m bringing this up again, hoping for inclusion in 4.1. If not, it would be great to know whether this is something that could happen in the future or whether it’s too much of a breaking change at this point.
Thanks!
sanjioh (Fabio Sangiovanni)
10:27 AM Revision 89d3b11e (git): [ruby/openssl] Look the SSLContext up from the SSL_CTX in the ALPN/NPN callbacks
ossl_sslctx_mark uses rb_gc_mark_movable, so the SSLContext relocates. Its VALUE
is stored in four places: the SSL_CTX's ex_data, and the callback argument of the
NPN advertise, NPN select and ALPN select callbacks. ossl_sslctx_compact u...
bitsweat (Jeremy Daer)
10:04 AM Revision 127e9038 (git): hash.c: add a substition hint
By guaranteeing that hints can't match `RHASH_AR_CLEARED_HINT`
we can save on checking the key for `UNDEF_P` in a bunch of places.
byroot (Jean Boussier)
09:27 AM Bug #22269: `Coverage.line_stub` clobbers already-collected coverage data
Patch: https://github.com/ruby/ruby/pull/18533 mugikurash (Shuta Mugikura)
09:26 AM Bug #22269 (Closed): `Coverage.line_stub` clobbers already-collected coverage data
`Coverage.line_stub` compiles the file with `compile_file` only to read the ISeq's `trace_points`. Since https://bugs.ruby-lang.org/issues/22018 `compile_file` registers the file into the coverage table, so calling `line_stub` while `Cov... mugikurash (Shuta Mugikura)
07:20 AM Feature #22256: Replace missing/dtoa.c with a uscale-based algorithm. Faster, smaller footprint, and fixes a rounding error.
[Feature #21308] was filed a while ago.
`dtoa.c` is really showing its age, and in the last couple years there has been a lot of new algorithms on that particular topic.
Currently `ruby/json` uses Grisu for `double -> string` and E...
byroot (Jean Boussier)
04:25 AM Revision b4322d90 (git): Fix reference update bug in iseq_scan_bits
In iseq_scan_bits, we only update original_iseq if the element at code
moved. However, this isn't correct as it's possible that code has already
gotten updated but not original_iseq. This will cause original_iseq to not
get updated.
peterzhu2118 (Peter Zhu)
04:09 AM Revision 38a74677 (git): [ruby/rubygems] Error out when `bundle init --gemspec` gets no specification
`Bundler.load_gemspec_uncached` returns nil when the gemspec evaluates
to nil, which an empty file does. `CLI::Init` was the only caller not
guarding against that, so it crashed with a `NoMethodError` backtrace
after already writing a pa...
hsbt (Hiroshi SHIBATA)
03:39 AM Revision 3d139905 (git): ZJIT: Eliminate constant-valued block params (#18369)
In the following code,
```ruby
def test(cond)
if cond
x = 1
else
x = 1
end
x
end
```
the `x` after the conditional would ordinarily get a block param merging two constant `1`. Even if we had dominator-based GVN, this wo...
Max Bernstein
03:35 AM Revision 1b33a60f (git): [ruby/rubygems] Rename the no_prune setting to keep_outdated_cache
The `prune` vocabulary is being reused for a new setting, and `no_prune`
was already a poor name for a flag that only decides whether `bundle
cache` keeps gems that dropped out of the resolution. `no_prune` is
still read until Bundler 5 ...
hsbt (Hiroshi SHIBATA)
03:35 AM Revision 5496feb0 (git): [ruby/rubygems] Drop the settings write behind the removed --no-prune flag
Every documented spelling of the flag raises before reaching it, so the
only way in was Thor resolving `--skip-no-prune` to a negated value,
which `flag_passed?` does not match. That let an undocumented spelling
change a setting the docu...
hsbt (Hiroshi SHIBATA)
02:30 AM Revision 55379274 (git): Bump taiki-e/install-action
Bumps the github-actions group with 1 update in the / directory: [taiki-e/install-action](https://github.com/taiki-e/install-action).
Updates `taiki-e/install-action` from 2.86.6 to 2.86.7
- [Release notes](https://github.com/taiki-e/i...
dependabot[bot]
02:25 AM Revision c56fa940 (git): Don't record EP escape in JIT when not enabled
We shouldn't record JIT information before the JIT is actually enabled.
This change doesn't seem to affect ZJIT or YJIT performance beyond the
margin of error:
ZJIT:
-------------- ------------ ------------ --------------...
peterzhu2118 (Peter Zhu)
02:15 AM Revision 4dd33ca6 (git): ZJIT: Fix lattice bug in SSA minimization (#18482)
Block param minimization was introduced here #17311, but a few tests did not properly eliminate redundant block params.
This is because I used `Vec::resize`. For most passes this was fine, especially when trivial block params were discov...
Jacob (Jacob Jacob)
02:01 AM Bug #22173: `Ractor.new { Fiber.current }.value` raises `[BUG] rb_ractor_confirm_belonging object-ractor id:1, current-ractor id:2`
This assertion failure does not reproduce since https://github.com/ruby/ruby/commit/09aab7899fa0d0014e458c319e689175881a2075 so I think we can close it. yahonda (Yasuo Honda)
01:47 AM Revision 5ee95de0 (git): [ruby/resolv] Compare generic classes by descent and stop building the zipped array
Generic#== accepted only direct subclasses while Message compared any
descendant, so an instance of a subclass of a generated class compared
unequal. Both now go through Generic.type_class_equal?. Passing a block
to zip also avoids alloc...
hsbt (Hiroshi SHIBATA)
01:47 AM Revision c77b5944 (git): [ruby/resolv] Compare generic resources by their type and class values
Dropping the class cache made every decode build a fresh class for an
unknown type, so comparing the classes by identity reported two otherwise
identical resources, questions, and messages as different.
https://github.com/ruby/resolv/co...
hsbt (Hiroshi SHIBATA)
01:47 AM Revision 1745c36e (git): [ruby/resolv] Shorten the comments added in the previous commit
https://github.com/ruby/resolv/commit/95e0a6664c
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
01:47 AM Revision 55f73130 (git): [ruby/resolv] Do not register on-demand classes for unknown DNS types and SvcParamKeys
Decoding a response with unknown (type, class) pairs or unknown
SvcParamKeys generated an anonymous class per value and registered it in
a constant and in ClassHash permanently, so a spoofed or malicious
response carrying many unknown va...
hsbt (Hiroshi SHIBATA)
01:47 AM Revision eafd4471 (git): [ruby/resolv] Describe the label limit the way the encoder now applies it
The comment predates the check moving into Label::Str and read as though a
label of 64 octets already overflowed its length octet. It does not: 64 to 255
write a reserved or compression pointer value, and only 256 or more wrap. Say
which...
hsbt (Hiroshi SHIBATA)
01:47 AM Revision d17b9216 (git): [ruby/resolv] Make the 63 octet label limit an invariant of Label::Str
Checking in Name.create left two ways to build an over-long label: Name.new,
which Config#generate_candidates uses to append search domains, and the
search list itself, which Config splits without going through Name.create.
Label::Str is...
hsbt (Hiroshi SHIBATA)
01:47 AM Revision 5bf9c3ce (git): [ruby/resolv] Raise ResolvError for an oversized name
A hostname is runtime data rather than a programming mistake, and callers
already wrap name resolution in rescue Resolv::ResolvError. Rejecting an
oversized name with ArgumentError escaped that rescue, since
Config#generate_candidates ru...
hsbt (Hiroshi SHIBATA)
01:47 AM Revision f681ca8a (git): [ruby/resolv] Count the encoded form when limiting DNS name length
The counter started at -1, which measures the presentation form, so a name
encoding to 257 octets passed the 255 octet limit of RFC 1035 section 3.1.
The encoded form includes each label's length octet and the root label's
terminating ze...
hsbt (Hiroshi SHIBATA)
01:47 AM Revision 04c367a7 (git): [ruby/resolv] Enforce DNS label and name size limits when encoding
A label longer than 255 octets wrapped its length octet mod 256 while the
data was written unchanged, so the wire bytes decoded to a different name
than the caller asked for. A hostname that passed an application's
allowlist could be sen...
hsbt (Hiroshi SHIBATA)
01:42 AM Revision efa87443 (git): Revert "[ruby/rubygems] Skip the RUBY_BOX gem CLI canary on Windows"
This reverts commit 86817cf6ef9c1bcf7ef0c876ac1ead5b51c0b029. Hiroshi SHIBATA
01:42 AM Revision 1c664d80 (git): Defer unloading box-local extension DLLs on Windows
box_entry_free could run before other T_DATA objects are finalized in
rb_objspace_call_finalizer, and FreeLibrary there unmapped the
rb_data_type_t and dfree functions that later finalization still
dereferences, crashing any boxed proces...
Hiroshi SHIBATA
12:30 AM Revision 3e1ea919 (git): Ignore mistaken indentation only commits and [ci skip]
nobu (Nobuyoshi Nakada)
12:29 AM Revision f1c708d0 (git): Adjust indent [ci skip]
nobu (Nobuyoshi Nakada)
12:27 AM Revision 9ee713a9 (git): Revert "Adjust indent [ci skip]"
This reverts commit c0a526dd97b22f462f49a2a0062420523303769d. nobu (Nobuyoshi Nakada)
12:26 AM Revision c0a526dd (git): Adjust indent [ci skip]
nobu (Nobuyoshi Nakada)

08/26/2026

11:49 PM Revision abe768e7 (git): [DOC] Doc for File::empty?- #18480
burdettelamar (Burdette Lamar)
09:52 PM Revision 0968fd4b (git): Require `Fiber::Scheduler#fiber_interrupt`. (#18513)
Samuel Williams
09:50 PM Revision 92318965 (git): [ruby/rubygems] Fix relative gemspec paths being expanded twice
`eval_gemspec` computed `path.expand_path` inside its `chdir` block, so a
relative path resolved against the gemspec directory instead of the
original working directory, and loading `foo/foo.gemspec` handed `eval` a
file name of `<root>/...
hsbt (Hiroshi SHIBATA)
09:42 PM Revision 6a4fe461 (git): [ruby/rubygems] Never prune a locally overridden git repository
A local override points a git source's install path at the developer's
own working repository, so scoping the removal to the definition's git
sources aimed `rm -rf` at their `.git`. Take only sources that live under
`Bundler.install_path...
hsbt (Hiroshi SHIBATA)
09:42 PM Revision a2a04cb5 (git): [ruby/rubygems] Require a bundle path before pruning
Without one Bundler installs into the system gem directory, where the
cache is shared with RubyGems and holds gem files Bundler never put
there, so pruning there would delete other people's archives. Skip it
with a warning instead. Git m...
hsbt (Hiroshi SHIBATA)
09:42 PM Revision 987ce3da (git): [ruby/rubygems] Fetch the archives a reinstall or bundle cache needs
The forced-reinstall check walked the whole resolution, so a lockfile
carrying other platforms or an excluded group sent every `--redownload`
back to the remote. Scope it to what this platform and these groups
install, and let `bundle ca...
hsbt (Hiroshi SHIBATA)
09:42 PM Revision b866cd78 (git): [ruby/rubygems] Prune after bundle cache has copied the gem files out
`bundle cache` installs first and copies the gem files afterwards, so
pruning at the end of that install left it with nothing to copy and it
failed with "Missing gem file". Skip the prune during that install and
run it once the app cache...
hsbt (Hiroshi SHIBATA)
09:42 PM Revision 54058ba8 (git): [ruby/rubygems] Download a gem again when the cache no longer holds it
An installed gem resolves without a remote, so `bundle install
--redownload` had nothing to reinstall from once the cache was gone, and
`prune` left no way back. Go remote when a forced reinstall finds an
uncached gem, and look the gem u...
hsbt (Hiroshi SHIBATA)
09:42 PM Revision 47aa05a7 (git): [ruby/rubygems] Add a prune setting for post-install cleanup
Container images ship Bundler artifacts they will never use again, so
images today hand-roll `rm -rf` over the cache and the git checkouts.
The new `prune` setting removes the same set from Bundler itself, and
everything it removes is re...
hsbt (Hiroshi SHIBATA)
09:27 PM Revision f3a72fe0 (git): [Bug #22242] Invalidate CCs on cc_table_dup
When a Ractor is started, rather than modifying the cc table in place we
make a copy and CAS the table. When making the copy we previously
skipped cc_entries with an invalidated CME. However, that left the CCs
associated with that entry ...
jhawthorn (John Hawthorn)
09:00 PM Bug #22242 (Closed): SEGV in method dispatch (`vm_call_iseq_setup_kwparm_nokwarg` / `def_iseq_ptr`) on Ruby 4.0.6 — Rails CI
Applied in changeset commit:git|f95e71cc1e2a082393d58db1eb6f57b09694f8cb.
----------
[Bug #22242] Invalidate CCs on cc_table_dup
When a Ractor is started, rather than modifying the cc table in place we
make a copy and CAS the table. Wh...
jhawthorn (John Hawthorn)
09:00 PM Revision 7eea38a4 (git): Reapply "Simplify iseq mark_and_move CC handling"
This reverts commit b746efc1fb46074ae659b4af0f9114aae9540e41. jhawthorn (John Hawthorn)
09:00 PM Revision 2a2d027c (git): Reapply "Fix check in cc_is_active"
This reverts commit 9aa30b512f12ac3e298f7b971cdbd0e2cae8fc68. jhawthorn (John Hawthorn)
09:00 PM Revision f95e71cc (git): [Bug #22242] Invalidate CCs on cc_table_dup
When a Ractor is started, rather than modifying the cc table in place we
make a copy and CAS the table. When making the copy we previously
skipped cc_entries with an invalidated CME. However, that left the CCs
associated with that entry ...
jhawthorn (John Hawthorn)
08:01 PM Revision 0c65ffcd (git): [ruby/prism] Remove now unneeded rdoc private annotations
RDoc 8 parses rbs (including inline) and so
automatically removes the annotations for us
https://github.com/ruby/prism/commit/5f4d156205
Earlopain (Earlopain _)
04:25 PM Revision c4e235f4 (git): ZJIT: Pass overflow cfunc call args on the stack (#18428)
k0kubun (Takashi Kokubun)
04:14 PM Bug #22263: NoMethodError: super: no superclass method 'require' for main — raised in a forked child process after a Ractor has exited in the parent (bisected to c59c4d717a)
luke-gru (Luke Gruber) wrote in #note-4:
> [@jeremyevans0 (Jeremy Evans)](/users/1604) is this intentional or a bug?
This is general question of how aliased methods should work with prepend. Currently, we allow a class to alias a met...
jeremyevans0 (Jeremy Evans)
02:47 PM Bug #22263: NoMethodError: super: no superclass method 'require' for main — raised in a forked child process after a Ractor has exited in the parent (bisected to c59c4d717a)
I have a reproduction showing the issue:
```ruby
module M
def foo
print "M#foo(orig)"
end
end
class C; include M; end
M.prepend(Module.new do
def foo
print "P#foo("
super
print ")"
end
end)
C.new....
luke-gru (Luke Gruber)
12:38 AM Bug #22263: NoMethodError: super: no superclass method 'require' for main — raised in a forked child process after a Ractor has exited in the parent (bisected to c59c4d717a)
Correction on the bisect result. 98f0921f2b is where the forked RailtieTest children start to crash (SIGSEGV or ArgumentError), not where this NoMethodError starts. Bisecting for the NoMethodError itself, with the same bin/test command, ... yahonda (Yasuo Honda)
12:04 PM Revision 0b2edb5b (git): Implement support for AR table backed identity hashes
This commit adds support for using AR tables for identity hashes (hashes
created by method Hash#compare_by_identity). Before this change, identity
hashes always used ST tables. However, this used a lot more memory because
ST tables are q...
peterzhu2118 (Peter Zhu)
11:56 AM Revision 68abb349 (git): [ruby/openssl] bn: support marshalling
This fixes tests with Ruby master, where unshareable T_DATA is copied
across Ractor via Marshal.
https://github.com/ruby/openssl/commit/943fe2340e
rhenium (Kazuki Yamaguchi)
09:53 AM Revision 1eb12836 (git): [ruby/mmtk] Bump mmtk-core
https://github.com/ruby/mmtk/commit/3926721638 peterzhu2118 (Peter Zhu)
09:36 AM Revision ef2ad774 (git): [ruby/rubygems] Cover the compact index success branch
Dropping Gem::Net::HTTPNotModified from it, or narrowing HTTPSuccess to
HTTPOK, left the suite green even though Updater depends on both the
304 and the 206 reaching it untouched.
https://github.com/ruby/rubygems/commit/b265de4bf7
Co-A...
hsbt (Hiroshi SHIBATA)
09:36 AM Revision b3fd4942 (git): [ruby/rubygems] Wrap raw network errors in FetchError in compact index fetcher
Gem::RemoteFetcher#request lets SocketError, Errno::ECONNREFUSED and
their kin through unwrapped, and every caller here rescues FetchError
alone. On a host where only index.rubygems.org is unreachable, the
fallback to the Marshal index n...
hsbt (Hiroshi SHIBATA)
09:36 AM Revision 114f30e4 (git): [ruby/rubygems] Reject https to http redirect downgrades in compact index fetcher
Gem::RemoteFetcher#fetch_http has refused a redirect from https to plain
http since 2012, but the compact index path, which is now the default
and decides which versions resolve, followed it. One 302 from a
compromised edge or a misconfi...
hsbt (Hiroshi SHIBATA)
08:41 AM Revision 76edf35f (git): Refactor RHash size computations
Share the same code between gc.c and hash.c. byroot (Jean Boussier)
08:22 AM Bug #22267 (Open): Active Support tests started failing on ruby master (bisected to [GH-18194])
On ruby-head, the Active Support (Rails) test suite fails with two Ractor-related errors (rails-nightly build 4651, https://buildkite.com/rails/rails-nightly/builds/4651#01a016ac-eada-492d-9548-44089079b973/L8324).
Rails CI failure. T...
yahonda (Yasuo Honda)
07:05 AM Revision 346b261a (git): Update bundled gems list as of 2026-08-26
git[bot]
06:20 AM Feature #22266 (Open): Stop warning for duplicate keywords in splatted literal hashes
Ruby warns for duplicate keywords in the same literal hash:
```shellsession
$ ruby -we '{h: 1, h: 1}'
-e:1: warning: key :h is duplicated and overwritten on line 1
```
Ruby does not warn for duplicate keywords in splatted hashes...
jeremyevans0 (Jeremy Evans)
06:04 AM Revision 4a6678f6 (git): Bump taiki-e/install-action
Bumps the github-actions group with 1 update in the / directory: [taiki-e/install-action](https://github.com/taiki-e/install-action).
Updates `taiki-e/install-action` from 2.86.5 to 2.86.6
- [Release notes](https://github.com/taiki-e/i...
dependabot[bot]
06:01 AM Revision 86817cf6 (git): [ruby/rubygems] Skip the RUBY_BOX gem CLI canary on Windows
A boxed gem CLI subprocess dies with SIGSEGV in
rb_objspace_call_finalizer at exit on Windows. The fix belongs in
Ruby::Box itself, so omit the canary there until it lands.
https://github.com/ruby/ruby/actions/runs/32933358242/job/98069...
hsbt (Hiroshi SHIBATA)
05:42 AM Bug #22264 (Closed): Warning missing from parse.y hash literals
Applied in changeset commit:git|e5132b162737829f744b2b23908b9d08479db977.
----------
[Bug #22264] Warn for duplicate keys after leading keyword splat
Leading keyword splats must not suppress duplicate literal key
warnings.
nobu (Nobuyoshi Nakada)
02:04 AM Bug #22264: Warning missing from parse.y hash literals
I agree with Jeremy's concern, but I think it should be discussed separately.
As for this bug, it stems from an oversight when we allowed `**` to be placed in locations other than the end of a hash literal; it should be fixed simply by ...
nobu (Nobuyoshi Nakada)
05:42 AM Revision e5132b16 (git): [Bug #22264] Warn for duplicate keys after leading keyword splat
Leading keyword splats must not suppress duplicate literal key
warnings.
nobu (Nobuyoshi Nakada)
05:15 AM Revision 37f38a37 (git): [ruby/rubygems] Add a canary for the gem CLI under RUBY_BOX=1
The unit tests cover each fix on its own, but nothing checks that a boxed
gem command actually gets as far as listing gems.
https://github.com/ruby/rubygems/commit/e6ee031539
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
05:15 AM Revision 1c4f9f0c (git): [ruby/rubygems] Drop RUBY_BOX from the extension build subprocess
Under Ruby::Box mkmf makes RbConfig.expand recurse until SystemStackError,
so building a native extension failed even once the CLI itself started.
Build tools are not a target of box isolation.
https://github.com/ruby/rubygems/commit/b4...
hsbt (Hiroshi SHIBATA)
05:15 AM Revision dc5b349c (git): [ruby/rubygems] Replace Marshal deep copies with Gem::Util.deep_dup
Under Ruby::Box (RUBY_BOX=1) the builtin Marshal runs in the root box and
cannot resolve Gem:: constants defined in the main box, so every gem
command failed to start while deep-copying its option defaults.
https://bugs.ruby-lang.org/is...
hsbt (Hiroshi SHIBATA)
03:34 AM Revision 8ebb6534 (git): [ruby/rubygems] Cache a shared git source only once per command
When several gems come from the same git block, Runtime#cache invokes
the shared Source::Git once per gem, and cache_to re-cloned and
re-checked out the whole worktree every time. For large repositories
this made bundle cache/update/inst...
hsbt (Hiroshi SHIBATA)
03:11 AM Revision 106d74c4 (git): [ruby/rubygems] Fix gemspec evaluation under Ruby::Box
TOPLEVEL_BINDING always belongs to the main box, so when Bundler is
loaded inside a user box, gemspecs were evaluated against the main
box's Gem::Specification, which lacks Bundler's monkey patches and
fails with NoMethodError on `source...
hsbt (Hiroshi SHIBATA)
02:28 AM Revision 327fdb91 (git): Guard `Net::HTTPHeader#content_length` spec by version
Content-Length parsing became strict in 4.1, so values with anything
around the digits now raise instead of returning the digits.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
12:46 AM Revision 2c260b8d (git): [ruby/net-http] Make Content-Length handling strict
(https://github.com/ruby/net-http/pull/324)
`Content-Length` value must have only digits.
See also RFC 9110 Section 8.6:
https://www.rfc-editor.org/rfc/rfc9110.html#section-8.6
Content-Length = 1*DIGIT
The current implementation ...
Sutou Kouhei
12:33 AM Revision 05e1f1f6 (git): [ruby/net-http] Limit the number of informational responses per request
A peer that keeps sending 1xx responses keeps the client in the read
loop of transport_request indefinitely, since the per-response header
limit resets for each response. Cap the count at 100, the same value
CPython's http.client uses.
...
hsbt (Hiroshi SHIBATA)
12:26 AM Bug #22265 (Closed): `Thread#value` can return before the target thread completes after a spurious Fiber scheduler unblock
Ruby 3.3 and 3.4 can allow an untimed `Thread#join` to return after a spurious Fiber scheduler wakeup, even though the target thread is still alive.
Because `Thread#value` relies on `Thread#join`, it can consequently return `nil` befo...
ioquatix (Samuel Williams)
12:17 AM Revision 078029fb (git): Fix memory leak in symbol_id_entry_directory
symbol_id_entry_directory is not an embedded TypedData, so we need to free
the allocated id_entry_dir as well.
peterzhu2118 (Peter Zhu)

08/25/2026

11:13 PM Revision 331568b2 (git): [ruby/net-http] Limit read length of a single response line
The response header cap added by #219 applies only once a complete line
has arrived, so a server that never sends a line terminator can still
grow the read buffer without bound, as reported in #315. Read the
status line, header lines, ch...
hsbt (Hiroshi SHIBATA)
10:50 PM Revision b5b032cc (git): Update default gems list at 7f00b21798a9dc156f43ab6fed9505 [ci skip]
git[bot]
10:49 PM Revision 7f00b217 (git): [ruby/net-protocol] v0.3.0
https://github.com/ruby/net-protocol/commit/fb347d5ff4 hsbt (Hiroshi SHIBATA)
10:15 PM Bug #22264: Warning missing from parse.y hash literals
I'm not sure whether it is desirable to warn for `{a: 1, **{a: 2}}`. I would guess that internally, this hits the same warning for `{a: 1, a: 2}` (which should warn), but for implementation details, it doesn't hit the warning for `{**{},... jeremyevans0 (Jeremy Evans)
06:24 PM Bug #22264 (Closed): Warning missing from parse.y hash literals
$ ruby --parser=parse.y -cve '{**{}, a: 1, **{a: 2}}'
ruby 4.1.0dev (2026-04-21T02:07:14Z aot be86d5704f) [arm64-darwin23]
Syntax OK
$ ruby --parser=parse.y -cve '{a: 1, **{a: 2}}'
ruby 4.1.0dev (2026-04-21T02:07:14Z aot be86d5704f)...
kddnewton (Kevin Newton)
09:55 PM Revision 9270124f (git): [ruby/rubygems] Delete `Bundler::ParallelInstaller::SpecInstallation#enqueued?`
- This predicate method has been unused since
https://github.com/ruby/rubygems/commit/7d1131672a84 in 2021 when the
`ready_to_enqueue?` method was simplified.
https://github.com/ruby/rubygems/commit/88d7eef941
issyl0 (Issy Long)
09:55 PM Revision 6c28747c (git): [ruby/rubygems] Delete the unused `Bundler::UI::Shell#quiet?` method
- In https://github.com/ruby/rubygems/commit/304a98301522 in 2013, "quiet?" was any
level that was not "debug", "info", or "warn",
- Its last use was removed in https://github.com/ruby/rubygems/commit/64f1294672e2
in 2014.
- Since ...
issyl0 (Issy Long)
09:51 PM Bug #22261: ruby-head builds have been failing on aarch64-linux CI in ruby/ruby-dev-builder
The daily "CRuby Dev Builds" workflow in ruby/ruby-dev-builder has been successful. Thanks for your quick fix! tikkss (Tsutomu Katsube)
01:15 PM Bug #22261 (Closed): ruby-head builds have been failing on aarch64-linux CI in ruby/ruby-dev-builder
Applied in changeset commit:git|e77a77111224426ca18eaeff55d7ad1618cbacc9.
----------
[Bug #22261] Keep GC root-marking frame alive
Prevent a tail call from discarding saved machine-register roots
before `rb_gc_mark_roots` scans the mac...
nobu (Nobuyoshi Nakada)
01:09 PM Bug #22261: ruby-head builds have been failing on aarch64-linux CI in ruby/ruby-dev-builder
nobu (Nobuyoshi Nakada) wrote in #note-1:
> Does [GH-18495](https://github.com/ruby/ruby/pull/18495) fix it?
Thank you for creating a fix.
The easiest way to know would be to merge that PR, and `ruby-dev-builder` runs once per day.
...
Eregon (Benoit Daloze)
12:45 PM Bug #22261: ruby-head builds have been failing on aarch64-linux CI in ruby/ruby-dev-builder
Does [GH-18495](https://github.com/ruby/ruby/pull/18495) fix it? nobu (Nobuyoshi Nakada)
11:41 AM Bug #22261 (Closed): ruby-head builds have been failing on aarch64-linux CI in ruby/ruby-dev-builder
The daily "CRuby Dev Builds" workflow in ruby/ruby-dev-builder has failed every day since 2026-08-07:
* https://github.com/ruby/ruby-dev-builder/actions/workflows/build.yml
Because of this, `ruby-version: head` currently installs...
tikkss (Tsutomu Katsube)
09:30 PM Revision 33464485 (git): [ruby/rubygems] Document the credential_store setting
Where a credential ends up, what happens when the store cannot be reached,
that the store belongs to the machine rather than to a project, and that
credentials already written in plain text are not migrated on their own.
https://github....
hsbt (Hiroshi SHIBATA)
09:30 PM Revision b4493396 (git): [ruby/rubygems] Ship the credential store with the bundler gem
Bundler reaches Gem::CredentialStore by name, so a bundler installed
against an older RubyGems needs the file itself, the way it already
carries the YAML serializer and the compact index client. Three places
enumerate what bundler ships,...
hsbt (Hiroshi SHIBATA)
09:30 PM Revision 1a48c7c0 (git): [ruby/rubygems] Keep bundler host credentials in the credential store when it is on
The credential_store setting takes the same values on this side, and
credential_store.<host> picks a different backend for one host, since a
backend gem published for one registry cannot know what its users want
everywhere else. Bundler ...
hsbt (Hiroshi SHIBATA)
09:30 PM Revision 0f7f4182 (git): [ruby/rubygems] Clear the credential store on gem signout
Signing out has to reach both places a key can live, including the keys
saved for other hosts with gem signin --host. The two halves report
separately, so a credentials file that cannot be removed does not leave
the stored keys behind, a...
hsbt (Hiroshi SHIBATA)
09:30 PM Revision a3661b9e (git): [ruby/rubygems] Keep gem API keys in the credential store when it is on
The :credential_store: gemrc setting, off by default, moves API keys out
of ~/.gem/credentials and into the OS store. A key is read from the store
ahead of the file, so the two never disagree about which one wins, and the
plain text copy...
hsbt (Hiroshi SHIBATA)
09:30 PM Revision 8ae89d7a (git): [ruby/rubygems] Add Gem::CredentialStore with native OS backends
Storing an API key in a plain text file leaves it readable by anything
running as the user. This wrapper keeps secrets in the operating system's
own store instead, through the security CLI on macOS, secret-tool on
Linux, and Windows Powe...
hsbt (Hiroshi SHIBATA)
09:07 PM Revision c6241150 (git): [ruby/rubygems] Bundler::Source::Git: avoid re-fetching the repo
In `install`, `self.to_s` is called by `print_using_message "Using ... from #{self}`.
This in turn calls `current_branch` which if the local git cache
is missing will re-clone it from scratch.
This is an issue, because a common optimiza...
byroot (Jean Boussier)
07:38 PM Revision 095a2917 (git): ZJIT: Add codegen test for Fixnum#<< overflow side exit (#18390)
Add codegen tests for the Fixnum left shift fastpath and its overflow side exit. Daichi Kamiyama
05:45 PM Revision 383397e1 (git): ZJIT: Index into instruction vectors with InsnId directly
Kevin Menard
05:45 PM Revision abc5a924 (git): ZJIT: Index into block vectors with BlockId directly
Kevin Menard
04:14 PM Misc #22262 (Third Party's Issue): OSS-Fuzz `fuzz_prism` target never calls `ruby_init()`, so Prism is not being fuzzed
Earlopain (Earlopain _)
03:26 PM Misc #22262: OSS-Fuzz `fuzz_prism` target never calls `ruby_init()`, so Prism is not being fuzzed
You should open an issue on the google oss-fuzz repo, I didn't even know that thing existed. It is clearly wrong. kddnewton (Kevin Newton)
02:46 PM Misc #22262 (Third Party's Issue): OSS-Fuzz `fuzz_prism` target never calls `ruby_init()`, so Prism is not being fuzzed
The OSS-Fuzz fuzz target `fuzz_prism` crashes on every non-empty input before it reaches
the parser, so Prism has never actually been fuzzed. The harness source lives in OSS-Fuzz
(`projects/ruby/fuzz_prism.cpp`), not in this repository...
schecki (Tim Scheckenbach)
03:54 PM Revision 89699e81 (git): hash.c: memzero hashes before allocating st_table
`hash_copy` will call `st_init_existing_table_with_size` which
allocates and may trigger GC causing the current hash to be marked.
So we need to zero-out the `st_table` to avoid a segfault.
byroot (Jean Boussier)
03:17 PM Bug #22263 (Open): NoMethodError: super: no superclass method 'require' for main — raised in a forked child process after a Ractor has exited in the parent (bisected to c59c4d717a)
### 1. First occurrence in Rails CI
https://buildkite.com/rails/rails-nightly/builds/4651#01a016ac-eaf9-4a71-9fb6-1924c8a7b9af
(job "activemodel (master-debug)", 2026-08-18, ruby 4.1.0dev (2026-08-18T13:12:35Z master 6b719acc57) +PRI...
yahonda (Yasuo Honda)
02:52 PM Revision 4d16abab (git): Avoid GCC clobbered warnings in Ractor payload build
Keep the payload builder uninlined in optimized GCC builds because
inlining causes false-positive `-Wclobbered` warnings.
nobu (Nobuyoshi Nakada)
02:52 PM Revision cd929ef3 (git): Enable ubuntu-26.04-arm job
nobu (Nobuyoshi Nakada)
02:03 PM Revision 17026737 (git): Replace Array#flatten{,!} internal ident hash with set
This used a hash with all true values, with is simple to convert
to a set to save on memory when flattening array with a large
number of nested elements.
jeremyevans (Jeremy Evans)
02:03 PM Revision 85220035 (git): Add rb_ident_set_new internal function
This is designed to replace rb_ident_hash_new calls when such hashes
are used purely with with true values.
To implement this, add a set_alloc_with_size_and_type static function,
and have set_alloc_with_size and rb_ident_set_new call it.
jeremyevans (Jeremy Evans)
01:24 PM Revision 7a0361b3 (git): Skip Fiddle::TestFunction#test_no_memory_leak on parse.y
byroot (Jean Boussier)
01:24 PM Revision 759cfbb9 (git): Hash#merge guess size
byroot (Jean Boussier)
01:24 PM Revision 60a4894b (git): Dynamic ar_table size
Instead of always allocating `ar_table` backed hashes in 160B
slots for them to have capacity of `RHASH_AR_TABLE_MAX_SIZE` (`8`),
they can now be allocated in any slot size between `64B` and `160B`.
`64B` is the minimum slot size that s...
byroot (Jean Boussier)
01:24 PM Revision 6d4a6a93 (git): Parametize `RHASH_AR_TABLE_MAX_BOUND`
For now it still returns a constant, but clarify when we're looking
for the max bound, versus a miss, etc.
byroot (Jean Boussier)
01:15 PM Revision e77a7711 (git): [Bug #22261] Keep GC root-marking frame alive
Prevent a tail call from discarding saved machine-register roots
before `rb_gc_mark_roots` scans the machine stack.
nobu (Nobuyoshi Nakada)
01:15 PM Revision a5338c32 (git): Fix clobbered warning
With gcc 15.2.0 on aarch64 Ubuntu 26.4:
```console
ractor_sync.c: In function ‘ractor_basket_new.constprop’:
ractor_sync.c:1093:82: warning: argument ‘type’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
1093 | ractor_basket_...
nobu (Nobuyoshi Nakada)
01:15 PM Revision 6f57a72f (git): Fix enum-compare warning
With gcc 15.2.0 on aarch64 Ubuntu 26.4:
```console
io_buffer.c: In function ‘io_buffer_flags_for_new’:
io_buffer.c:978:20: warning: comparison between ‘enum rb_io_buffer_flags’ and ‘enum <anonymous>’ [-Wenum-compare]
978 | if (all...
nobu (Nobuyoshi Nakada)
01:15 PM Revision f21a04fe (git): Fix maybe-uninitialized warning
With gcc 15.2.0 on aarch64 Ubuntu 26.4:
```console
hash.c: In function ‘rb_hash_s_create’:
hash.c:1982:20: warning: ‘hash’ may be used uninitialized [-Wmaybe-uninitialized]
1982 | return hash;
| ^~~...
nobu (Nobuyoshi Nakada)
01:15 PM Revision 259a5f97 (git): [ruby/prism] Fix extra doc docmment
https://github.com/ruby/prism/commit/9df2a21995764880c6d27213e2c7960f2232c879 changed the comment style
Now rdoc picks this up. The comment doesn't say much, seems fine to just remove
https://github.com/ruby/prism/commit/f703c615ae
Earlopain (Earlopain _)
11:19 AM Revision c344021a (git): [ruby/net-protocol] Trim the comments added with the readuntil rewind
The floor's two reasons fit in one block, and the two tests that
restated them are named for what they cover.
https://github.com/ruby/net-protocol/commit/6ffd258b7c
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
11:19 AM Revision ee3b80cd (git): [ruby/net-protocol] Add limit option to Net::BufferedIO#readuntil
readuntil buffers until the terminator arrives, so a peer that never
sends one grows the read buffer without bound. The limit lets a protocol
implementation cap what a single read may return, raising the new
Net::ReadLimitExceeded instea...
hsbt (Hiroshi SHIBATA)
10:00 AM Feature #22130: Add a new YARV instruction for a `String.new` fast path
So I just ran into that issue again on my PR to make `ar_table` dynamic: https://github.com/ruby/ruby/pull/18345
`Hash.new(capacity:)` now can't allocate anything but the smallest usable slot. In theory `Hash.new(capacity: 8)` should ...
byroot (Jean Boussier)
09:50 AM Revision a06bf2f8 (git): Lock `IO::Buffer` coercion callbacks. (#18490)
Samuel Williams
09:43 AM Revision f830d938 (git): Skip the rbs 4.2.0 stdlib tests that still fail in CI
rbs 4.2.0 adds Etc and IO#pathconf stdlib tests that need getpwent(),
getgrent() and the pathconf constants, none of which exist on Windows,
so they go in the Windows-only list. OpenURISingletonTest reaches
www.ruby-lang.org and now fail...
hsbt (Hiroshi SHIBATA)
09:43 AM Revision 225ff017 (git): Update rbs to 4.2.0
The bundled_gems workflow has failed every day since 2026-08-16 because
rbs 4.0.3's Ripper_test.rb no longer finds Ripper on master. rbs 4.2.0
picks up the upstream fix that requires "ripper" in the stdlib tests.
typeprof 0.32.0 never fi...
hsbt (Hiroshi SHIBATA)
09:43 AM Revision 48a3a07b (git): Unpin rbs from the bundled gems auto-update
rbs was pinned in March 2026 while the 4.0 series was breaking CI. Now
that 4.2.0 is in gems/bundled_gems and the tests pass again, the daily
workflow can pick up later rbs releases on its own.
hsbt (Hiroshi SHIBATA)
09:40 AM Revision be288812 (git): [ruby/net-protocol] Add regression tests for the readuntil rewind
Cover a terminator split across two reads and across more than two, the
negative rewind the floor clamps, the floor keeping the search out of
consumed bytes, and the ignore_eof branch that returns data without a
terminator. FakeReadParti...
hsbt (Hiroshi SHIBATA)
09:40 AM Revision e7619442 (git): [ruby/net-protocol] Fix readuntil missing a terminator that spans two reads
BufferedIO#readuntil resumed searching at the previous buffer end, so a
multi-byte terminator split across two fills, such as "\r" ending one
chunk and "\n" starting the next, was never matched and readuntil
returned data past the termin...
hsbt (Hiroshi SHIBATA)
08:17 AM Bug #22259: Arrays sharding a buffer segfault when concatenating with each other
This bug seem to have been present all the way back since Ruby 2.5, so requesting a backport accordingly. byroot (Jean Boussier)
03:10 AM Bug #22259 (Closed): Arrays sharding a buffer segfault when concatenating with each other
Applied in changeset commit:git|46c287e2ca39da63d5164e2b7227308a41554c9a.
----------
Fix splicing an array that shares its buffer with a longer array
Arrays sharing one buffer have the same data pointer, so rb_ary_splice()
took `a` in ...
mame (Yusuke Endoh)
07:50 AM Revision 753ace46 (git): Lock `IO::Buffer` allocations during copy. (#18489)
Samuel Williams
06:23 AM Bug #22242: SEGV in method dispatch (`vm_call_iseq_setup_kwparm_nokwarg` / `def_iseq_ptr`) on Ruby 4.0.6 — Rails CI
I've managed to reproduce this under rr locally through the Active Record test suite with `VM_CHECK_MODE` enabled. I don't have a more reliable reproduction yet or a fix.
What the recording seems to show is that the ccs entries become o...
jhawthorn (John Hawthorn)
04:44 AM Bug #22242: SEGV in method dispatch (`vm_call_iseq_setup_kwparm_nokwarg` / `def_iseq_ptr`) on Ruby 4.0.6 — Rails CI
The crash does not reproduce on master, so bisecting from the 4.0 branch point (d375bcc965d4) gives the first fixed commit:
> 1da540aeaa1507af4c050bf8a6ee2802e65f9aac "Invalidate CC on cme free as well" (gc.c, +3/-1)
The boundary i...
yahonda (Yasuo Honda)
06:20 AM Revision 45088e23 (git): [ruby/mmtk] Prevent overflow values
(https://github.com/ruby/mmtk/pull/107)
https://github.com/ruby/mmtk/commit/f6b8b0d5ae
Michael (Michael Michael)
04:55 AM Revision b9bcae99 (git): Preserve `IO::Buffer` read-only state when resizing. (#18487)
Samuel Williams
03:10 AM Revision 72a511da (git): Split rb_ary_splice() into a pointer version and an array version
Most callers have the replacement as an array object; let them pass it
directly.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
mame (Yusuke Endoh)
03:10 AM Revision 46c287e2 (git): Fix splicing an array that shares its buffer with a longer array
Arrays sharing one buffer have the same data pointer, so rb_ary_splice()
took `a` in `b = a.dup; b.pop; b.concat(a)` for `b` itself and rebased
the source onto `b`'s shorter storage, copying uninitialized memory.
Have the callers tell wh...
mame (Yusuke Endoh)
03:03 AM Revision f2b2cfac (git): [ruby/rubygems] Flush atomic write temp files before renaming over the destination
The temporary file was renamed into place before being closed, so
buffered data had not reached the filesystem yet and a concurrent reader
could observe an empty destination. A flush failure such as ENOSPC would
surface only after the de...
hsbt (Hiroshi SHIBATA)
03:03 AM Revision f4cba14a (git): [ruby/rubygems] Truncate atomic write temp file names at character boundaries
The basename was cut with byteslice, which can split a multibyte
character in half. Filesystems enforcing UTF-8 validity such as APFS then
reject the temporary name with EILSEQ.
https://github.com/ruby/rubygems/commit/a7dc5647b0
Co-Aut...
hsbt (Hiroshi SHIBATA)
02:46 AM Revision 44da9d73 (git): Make `IO::Buffer` I/O operations single-transfer and composable. (#18483)
Samuel Williams
02:34 AM Revision dda27dcf (git): [ruby/rubygems] Use %r for the slash-containing regexp
Fixes the Style/RegexpLiteral offense from CI.
https://github.com/ruby/rubygems/commit/c4069df44d
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
02:34 AM Revision 74bc171e (git): [ruby/rubygems] Update changelog fixture to the current header format
The fixture changelog still used the old `## VERSION (DATE)` header, so
the fixed `release_date_for` no longer matched it and the released case
of the version spec failed.
https://github.com/ruby/rubygems/commit/36ee802a7e
Co-Authored-...
hsbt (Hiroshi SHIBATA)
02:34 AM Revision 0a316984 (git): [ruby/rubygems] Fix release date extraction for the current changelog header format
release_date_for in spec/support/build_metadata.rb matched the
changelog's old `## VERSION (DATE)` header, but .changelog.yml has
generated `## VERSION / DATE` headers since Bundler 4.0.9. The regex
silently failed to match, so built_at ...
meganemura (Teppei Fujii)
01:24 AM Feature #13847 (Closed): Gem activated problem for default gems
This can be addressed by Ruby::Box [Feature #21311], which loads code, including C extensions, into an isolated space with its own constants and loaded features. That resolves the concerns raised in 2017 about shared library conflicts an... hsbt (Hiroshi SHIBATA)
12:38 AM Revision 4b8d4626 (git): [DOC] Doc for File::dirname
burdettelamar (Burdette Lamar)
12:34 AM Revision 3d36072a (git): [DOC] Fix `IO.puts` doc
MSP-Greg (Greg L)

08/24/2026

11:37 PM Bug #20243: M:N threading VM_ASSERT failure in rb_current_execution_context with clang 17 (on Linux)
wanabe (_ wanabe) wrote in #note-3:
> 7866e124a852c344b5762eb917c03a1f95d9058d == https://github.com/ruby/ruby/pull/13217 fixed the issue.
I don't think it is fixed, please see https://gcc.gnu.org/PR124995. It happens with recent GCC...
thesamesam (Sam James)
10:16 PM Bug #20243 (Closed): M:N threading VM_ASSERT failure in rb_current_execution_context with clang 17 (on Linux)
7866e124a852c344b5762eb917c03a1f95d9058d == https://github.com/ruby/ruby/pull/13217 fixed the issue.
```
$ git checkout 7866e124a852c344b5762eb917c03a1f95d9058d~ && make -j miniruby 2>&1 >/dev/null && ./miniruby ../a.rb 2>&1 |head -n...
wanabe (_ wanabe)
11:12 PM Revision 4ea55466 (git): [ruby/resolv] Drop a TCP connection that cannot carry another request
Giving up part way through a frame leaves the stream between frame
boundaries, so reusing the cached requester made every later attempt
read the previous frame's bytes as a length prefix. Asking the requester
instead of its class keeps a...
hsbt (Hiroshi SHIBATA)
11:12 PM Revision 54db2e95 (git): [ruby/resolv] Apply the request deadline to TCP frame reads
Requester#request computes a monotonic time limit but only the socket
readability wait honoured it, so a peer that sends an incomplete frame
and keeps the connection open blocked past the configured timeouts
until it closed. The paramete...
hsbt (Hiroshi SHIBATA)
11:02 PM Bug #22259: Arrays sharding a buffer segfault when concatenating with each other
Thx for the patch, much cleaner than mine. Indeed I thought there must have been a cleaner fix, but I admit I was out of my depth. chucke (Tiago Cardoso)
06:36 PM Bug #22259: Arrays sharding a buffer segfault when concatenating with each other
Confirmed and reproduced. Thanks for the report.
While looking into it I found that the same line causes another bug.
```ruby
a = [:A, :B, :C, :D, :E]
b = a[1, 4] #=> [:B, :C, :D, :E]
a[0, 0] = b
p a # expected: [:B, :C...
mame (Yusuke Endoh)
11:07 AM Bug #22259 (Closed): Arrays sharding a buffer segfault when concatenating with each other
A succession of crashes was observed on a particular workload from our app, involving recursive set operations, after upgrading it to ruby 4.0.6 . LLM was used to build a reproduction (shared in the description of the PR linked below), a... chucke (Tiago Cardoso)
10:54 PM Revision ff808c66 (git): [ruby/rubygems] Add a release notes link to the update suggestion
With the changelog dump gone, the pre-update notice is where users decide whether to update, so link the versioned CHANGELOG.md there too, matching npm's three-line notice.
https://github.com/ruby/rubygems/commit/4ca3c9eba1
Co-Authored...
hsbt (Hiroshi SHIBATA)
10:54 PM Revision 05d58bd8 (git): [ruby/rubygems] Print a release notes link instead of the whole changelog on `gem update --system`
CHANGELOG.md is over 7,000 lines of generated PR titles, and printing every entry since the previous version dominated the output (478 of the 499 lines on the ruby:3.4 image). Print a single line linking the versioned CHANGELOG.md instea... hsbt (Hiroshi SHIBATA)
10:21 PM Revision 45702961 (git): Inverse `hash_alloc` and `hash_alloc_capa` naming
byroot (Jean Boussier)
10:21 PM Revision c7018a38 (git): Hash#rehash: right-size the temporary ar_table
byroot (Jean Boussier)
08:50 PM Revision 177ead8d (git): Make IO::Buffer MemoryView ready (#17965)
`null?` buffer isn't MemoryView available.
Not `null?` buffer is MemoryView available. It can be exported as a
1-dimensional contiguous array of bytes.
Users can't change the underlying memory of the exporting IO::Buffer
while exported...
Sutou Kouhei
06:44 PM Revision c4fdf07d (git): ZJIT: Reduce SideExit HashMap rehash (#18411)
If we don't pre-size the HashMap, it has to re-hash when resizing.
Hashing a SideExit is slow. Give a size hint so we only hash ~once per
exit.
Max Bernstein
06:25 PM Revision 6e3061c7 (git): Add accessors for ISEQ_BODY(iseq)->variable fields
Luke Gruber
06:25 PM Revision 5552e2c5 (git): Shrink iseq->body struct: allocate iseq->body->variable lazily
Most of the time in a production app most iseqs won't have iseq->body->variable
set to anything non-default. We can allocate it lazily and save 32 bytes per iseq.
Some large apps have millions of iseqs, so it adds up.
32B saved per iseq...
Luke Gruber
06:13 PM Revision 90529c25 (git): Raise YJIT’s `case` specialization limit to 256 (#18374)
Raise YJIT case dispatch specialization limit to 256 Ian Ker-Seymer
05:38 PM Feature #22231: Add `IO::Buffer#index`
Thanks for taking this.
Matz asked for out-of-range `offset` and `length` to return `nil` rather than raise. Assuming you have no objection to that direction, there are a few points I would like to think through.
The first is wheth...
himura467 (Akito Shitara)
12:32 PM Feature #22231: Add `IO::Buffer#index`
Thanks for creating this issue, I will review the details. ioquatix (Samuel Williams)
03:04 PM Revision 065a5592 (git): [ruby/json] Add JSON::ParserError#json_path
(https://github.com/ruby/json/pull/1062)
Add JSON::ParserError#json_path
https://github.com/ruby/json/commit/9ae76bdd3d
Co-authored-by: Jean Boussier <byroot@ruby-lang.org>
Ojus Chugh
01:34 PM Revision b548f16e (git): Make union for positions and succ_index_table in rb_iseq_constant_body
We only use either positions and succ_index_table (when VM_INSN_INFO_TABLE_IMPL == 2,
positions is converted to succ_index_table), so we waste 8 bytes in
rb_iseq_constant_body. This changes it so that they are in a union.
peterzhu2118 (Peter Zhu)
12:51 PM Feature #21700 (Closed): `IO::Buffer.map`: offset argument is "broken" and needs to be made more useful
Applied in changeset commit:git|53bc08564542206d0f93dfe984059e245ad16d46.
----------
Expose `IO::Buffer` mapping alignment. (#18474)
[Feature #21700]
Anonymous
12:50 PM Revision 53bc0856 (git): Expose `IO::Buffer` mapping alignment. (#18474)
[Feature #21700] Samuel Williams
12:10 PM Revision 2449a13a (git): Hash::[] start from a right-sized hash
Saves on potentially having to reallocate multiple times. byroot (Jean Boussier)
12:08 PM Bug #22260 (Open): Ruby::Box: SIGSEGV when calling a method inside an isolated Proc defined at class/module body (RUBY_BOX=1)
## Summary
Under `RUBY_BOX=1`, any method call inside a Proc isolated by `Ractor.make_shareable` (or `Proc#isolate`) and defined at a class/module body crashes the VM:
```console
$ RUBY_BOX=1 ruby -e 'module M; L = Ractor.make_sha...
zonuexe (Kenta USAMI)
11:50 AM Bug #22219 (Closed): IO::Buffer#free, #resize and #transfer should raise FrozenError if the receiver is frozen
Applied in changeset commit:git|5ebbf33a289a314d424fd2b51f5476b0959f4ad3.
----------
Respect frozen `IO::Buffer` lifecycle state. (#18473)
[Bug #22219]
Anonymous
11:50 AM Revision 5ebbf33a (git): Respect frozen `IO::Buffer` lifecycle state. (#18473)
[Bug #22219] Samuel Williams
11:32 AM Bug #21672 (Closed): `IO::Buffer.new` does not check that flags are valid
Applied in changeset commit:git|d3bf4529e3553f25104a2f80a5335e536e36bd90.
----------
Validate `IO::Buffer` constructor flags. (#18470)
[Bug #21672]
Anonymous
11:32 AM Revision d3bf4529 (git): Validate `IO::Buffer` constructor flags. (#18470)
[Bug #21672] Samuel Williams
11:14 AM Revision ddb7df37 (git): Front-load slower compilation shards
Start slower and less predictable shards earlier to reduce the overall
workflow completion time.
nobu (Nobuyoshi Nakada)
11:12 AM Bug #22195 (Closed): IO::Buffer read after free silently returns empty data instead of raising
Applied in changeset commit:git|281c2d4c19f3e7a10772ae0e62ba01ae3695500a.
----------
Document `IO::Buffer#free` empty state. (#18471)
[Bug #22195]
Anonymous
11:12 AM Revision 281c2d4c (git): Document `IO::Buffer#free` empty state. (#18471)
[Bug #22195] Samuel Williams
11:00 AM Revision cc706f39 (git): Clarify `IO::Buffer` slice validity documentation. (#18469)
Samuel Williams
10:31 AM Bug #19970 (Closed): Eval leaks callcache and callinfo objects on arm32 (linux)
It has been fixed at 1c97abaabae6844c861705fd07f532292dcffa74 == https://bugs.ruby-lang.org/issues/19907.
I confirmed it with arm32v7/ubuntu:noble docker image on qemu-user-static.
```
root@1294e0e49506:/ruby/tmp/master# for commit ...
wanabe (_ wanabe)
10:31 AM Revision 042e2bfd (git): Process.warmup: recompute allocatable_bytes
A problem I ran into in production, is that the boot sequence,
which tend to be allocation heavy, would cause the `allocatable_bytes`
(or previous version equivalent) to grow much higher than what the
application runtime actually needs.
...
byroot (Jean Boussier)
09:24 AM Bug #22242: SEGV in method dispatch (`vm_call_iseq_setup_kwparm_nokwarg` / `def_iseq_ptr`) on Ruby 4.0.6 — Rails CI
A `VM_CHECK_MODE` build turns this from a rare SEGV in random places into an
assertion at the moment the corrupted call cache is used, and the assertion
says the cc is holding a reclaimed cme.
```
RUBY_CONFIGURE_OPTS="cppflags=-DVM...
kamipo (Ryuta Kamizono)
09:06 AM Revision 09fdc3be (git): Avoid unsafe zero-length `IO::Buffer` operations. (#18465)
- All `null?` buffers will result in zero-length operations. Samuel Williams
08:54 AM Revision 37dc070b (git): [ruby/rubygems] Note that the patch level options also imply strict
They flip the same strict flag as --filter-strict, so the cooldown
caveat applies to them too. Review finding UX-1 (round 3).
https://github.com/ruby/rubygems/commit/92933f7b7b
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
08:54 AM Revision 4e7d55bb (git): [ruby/rubygems] Document that strict mode carries no cooldown annotations
Review finding UX-3 (round 2).
https://github.com/ruby/rubygems/commit/0fe5f1591e
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
08:54 AM Revision 5c26e1ff (git): [ruby/rubygems] Evaluate cooldown remaining days against a single timestamp
The resolver already pins its cooldown clock via cooldown_now; do the
same here so every annotation in one run shares the same reference
time. Review finding API-2 (round 2).
https://github.com/ruby/rubygems/commit/8a945d0d61
Co-Author...
hsbt (Hiroshi SHIBATA)
08:54 AM Revision 8f3d809e (git): [ruby/rubygems] Include the source in the matching_specs memo key
Unreachable today because specs_for_outdated_check yields one spec per
name, but keying on the argument that feeds the computation keeps the
cache honest. Review finding API-1 (round 2).
https://github.com/ruby/rubygems/commit/e710e9ef9...
hsbt (Hiroshi SHIBATA)
08:54 AM Revision 37ba8a69 (git): [ruby/rubygems] Pin the singular form of the cooldown remaining-days note
No test exercised the "1 more day" path. Review finding GEM-2.
https://github.com/ruby/rubygems/commit/a1baec1d4b
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
08:54 AM Revision 6b103760 (git): [ruby/rubygems] Add a strict-mode regression test for outdated with cooldown
In strict mode the resolved version is already cooldown-filtered, so no
cooldown annotations appear. Pin that down. Review finding UX-4.
https://github.com/ruby/rubygems/commit/6f564d219a
Co-Authored-By: Claude Fable 5 <noreply@anthrop...
hsbt (Hiroshi SHIBATA)
08:54 AM Revision ecea2620 (git): [ruby/rubygems] Unnest the interpolation in the outdated cooldown column
Review finding GEM-1.
https://github.com/ruby/rubygems/commit/595c21856d
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
08:54 AM Revision f474b2db (git): [ruby/rubygems] Memoize matching_specs in bundle outdated
The candidate list was recomputed for the same gem by
retrieve_active_spec and newest_out_of_cooldown. Review finding API-2.
https://github.com/ruby/rubygems/commit/1be428df41
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
08:54 AM Revision 9a37be87 (git): [ruby/rubygems] Document the newest out-of-cooldown tokens in bundle-outdated(1)
The man page enumerates the cooldown output tokens, so the two tokens
added for #9624 belong there too. Review finding UX-1.
https://github.com/ruby/rubygems/commit/9d227a2b10
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
08:54 AM Revision ee8f5c6e (git): [ruby/rubygems] Say "out of cooldown" in the outdated table too
The table said "1.5.0 available", but "available" already denotes the
opposite state in the install summary, which reports a blocked version
as "(available in 6 days)". Reuse the exact antonym of the prose
"in cooldown for N more days" i...
hsbt (Hiroshi SHIBATA)
08:54 AM Revision b8f4f8ab (git): [ruby/rubygems] Show the newest out-of-cooldown version in bundle outdated
With cooldown enabled, "newest" is often a version still inside the
cooldown window and the newest version bundler would actually adopt was
not shown anywhere. Append it to the outdated line, both in the
parseable output and in the table...
hsbt (Hiroshi SHIBATA)
08:46 AM Revision 4bdea88e (git): [ruby/rubygems] Do not rely on the host RubyGems for literal glob joins in Bundler
Bundler runs against whatever RubyGems the host provides, so calling `Gem::Util.glob_files_in_dir` left `bundle cache` pruning able to resolve a cache entry named `~` to the real home directory and hand it to `FileUtils.rm_rf` on every R... hsbt (Hiroshi SHIBATA)
08:46 AM Revision ae04a9d9 (git): [ruby/rubygems] Avoid interpolating install paths into glob patterns
`gem contents`, `gem stale` and the `gem setup` old-doc cleanup returned no matches when the install path contains glob metacharacters. For `--lib-only`, glob `raw_require_paths`, which stay relative to `full_gem_path`, rather than `requ... hsbt (Hiroshi SHIBATA)
08:46 AM Revision 08735aec (git): [ruby/rubygems] Resolve globbed entries literally in Gem::Util.glob_files_in_dir
Matched entries were resolved with File.expand_path, so an entry starting with `~` was expanded into the home directory. A cache directory named `~` made `bundle cache` pruning delete files under `$HOME`, and an entry like `~foo` raised ... hsbt (Hiroshi SHIBATA)
08:36 AM Revision e6a0e37b (git): [ruby/rubygems] Read offset-less created_at timestamps as UTC
A created_at without a time zone offset was parsed as local time, so a
third-party server that omits the offset shifted the cooldown window by
whatever offset the machine running bundler happened to have.
rubygems.org always sends one, s...
hsbt (Hiroshi SHIBATA)
08:36 AM Revision 298a40c4 (git): [ruby/rubygems] Warn when a configured cooldown value is invalid
A cooldown from a config file or from BUNDLE_COOLDOWN went through
value.to_i, so "abc" became 0 and "-5" stayed negative, and either one
disabled the cooldown without saying so. Read it with Integer() and
warn, naming the effect: such a...
hsbt (Hiroshi SHIBATA)
08:36 AM Revision ee1da20d (git): [ruby/rubygems] Memoize cooldown settings lookup during resolve
The resolver asks for the cooldown once per candidate spec, paying a
Bundler.settings lookup each time, so read it once per remote. That
makes the value a snapshot, which is fine because nothing changes the
setting after the sources are ...
hsbt (Hiroshi SHIBATA)
08:36 AM Revision 0dc80ae3 (git): Bump the vcpkg builtin-baseline for the gmp msys2 404
The gmp portfile at the previous baseline downloads
autoconf2.71-2.71-3-any.pkg.tar.zst from msys2 mirrors by a pinned URL,
but msys2 has rotated the package to -4, so every mirror returns 404 and
Windows CI fails to build gmp whenever t...
mame (Yusuke Endoh)
07:12 AM Revision f01bf185 (git): Refactor core_hash_merge_ptr and core_hash_merge_kw
Rather than start from a mutable hash created with `newhash` or
`duphash`, and then iteratively insert into it, it's preferable to
start from a constant hidden hash, so that we can directly allocate
the final hash with the right size.
F...
byroot (Jean Boussier)
05:31 AM Revision 3570d985 (git): Preserve compilation sources for failed job re-runs
Keep the source artifact when compilation fails so failed shards can be
re-run. Allow source preparation itself to overwrite the artifact.
nobu (Nobuyoshi Nakada)
04:46 AM Revision 4c978a5b (git): Make empty `IO::Buffer` slices valid. (#18461)
Samuel Williams
04:27 AM Revision df55fe4a (git): Remove redundant debug compiler jobs
Avoid separate builds for checks already enabled by `RUBY_DEBUG` or
`RUBY_DEVEL`.
nobu (Nobuyoshi Nakada)
04:04 AM Revision 4d5ae426 (git): Document dynamic `IO::Buffer` slice validity. (#18459)
Samuel Williams
03:04 AM Revision 98606e21 (git): [ruby/rubygems] Document Bundler proxy semantics in bundle-config
The switch from net-http-persistent to Gem::Request (https://github.com/ruby/rubygems/pull/9786) aligned
Bundler proxy handling with RubyGems: https_proxy now takes precedence
for https sources, proxy credential variables follow the sche...
Hiroshi SHIBATA
03:04 AM Revision cc4a4828 (git): [ruby/rubygems] Restore NO_PROXY wildcard support in Bundler proxy detection
net-http-persistent treated NO_PROXY="*" as a request to bypass the
proxy for every host, but Gem::URI::Generic.use_proxy? parses "*" as a
literal hostname that never matches, so the wildcard stopped disabling
proxies after the switch to...
Hiroshi SHIBATA
03:04 AM Revision e6e55f97 (git): [ruby/rubygems] Disable transport-level retries on Bundler connections
Gem::Request already resends requests on stale connections and
Bundler::Retry retries failed requests, so the Gem::Net::HTTP retry
layer (max_retries defaults to 1) only multiplied the number of
attempts, doubling the worst-case wait on ...
Hiroshi SHIBATA
02:47 AM Revision 10465356 (git): [ruby/rubygems] Preserve native extensions during implicit clean
https://github.com/ruby/rubygems/commit/3abbef3c18 sjh9714
02:34 AM Revision f9f83168 (git): Bump the github-actions group across 1 directory with 4 updates
Bumps the github-actions group with 4 updates in the / directory: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action), [github/codeql-action/upload... dependabot[bot]
02:19 AM Revision e2044876 (git): [ruby/rubygems] Honor NO_PROXY="*" in Gem::Request::ConnectionPools
curl and net-http-persistent treat a "*" entry as bypassing the proxy
for every host, and Bundler's fetcher already honors it, but no_proxy?
never matched it, so gem commands kept using the proxy.
https://github.com/ruby/rubygems/commit...
Hiroshi SHIBATA
02:14 AM Bug #22258 (Open): Update bundled json to >= 2.19.2 on ruby_4_0 (CVE-2026-33210)
The ruby_4_0 branch bundles json 2.18.0 (ext/json/lib/json/version.rb), which is affected by CVE-2026-33210 / GHSA-3m6g-2423-7cp3 (format string injection when parsing with allow_duplicate_key: false, fixed in json 2.19.2 — there is no p... securepii-dev (Russell Penney)
02:04 AM Revision c5199f46 (git): Preserve old call cache entry before method lookup
Read the previous method entry before slow lookup invalidates its call
cache. This allows debug counters and assertions to be enabled
together.
nobu (Nobuyoshi Nakada)
12:52 AM Revision 489b4539 (git): [DOC] Add to doc for Pathname#directory?
burdettelamar (Burdette Lamar)
12:51 AM Revision 1d483d07 (git): [DOC] Doc for File::directory?
burdettelamar (Burdette Lamar)
12:50 AM Revision 7282adc5 (git): [DOC] Doc for File::unlink
burdettelamar (Burdette Lamar)
12:49 AM Revision 37c98349 (git): [DOC] Doc for File::ctime
burdettelamar (Burdette Lamar)
12:45 AM Revision b4809ba4 (git): [DOC] Tweaks for File::chardev? (#18427)
burdettelamar (Burdette Lamar)
12:45 AM Revision 446729fb (git): [DOC] Tweaks for File::blockdev?
burdettelamar (Burdette Lamar)
12:40 AM Revision 92bce8ad (git): [ruby/rubygems] Use `delete_prefix` to strip the `subjectAltName` email tag
- `Gem::Security::Signer#extract_name` matched `/\Aemail:/` then read
the non-matching part of the string out of `$'`.
- Prefer `delete_prefix("email:")` as it's understandable by mortals.
- Consequently get rid of a RuboCop disable ...
issyl0 (Issy Long)
12:13 AM Revision 05cb6520 (git): Reduce memory for proc objects
We know the type of the proc object at allocation time, so we can allocate
exactly the amount of memory needed for that type.
We can also shrink the type from a 4 byte enum since there are only 4 types
of procs. This allows us to put so...
peterzhu2118 (Peter Zhu)
 

Also available in: Atom