Project

General

Profile

Activity

From 09/17/2026 to 09/23/2026

Today

05:53 AM Revision 852b2434 (git): Fix use-after-free in String#unpack
If the source string is modified in the block of String#unpack, it can
cause an use-after-free. For example, the following script crashes:
fmt = "A" * 1_000_000
str = "C" * 1_000_000
str.unpack(fmt) { fmt.clear }
peterzhu2118 (Peter Zhu)
05:36 AM Bug #22377 (Closed): compile.c: `getlocal` not turned into `getlocal_WC_0`
Applied in changeset commit:git|0fab30f723810af1608d2162e2aef32b44a1ee3a.
----------
compile.c: ensure swapped element isn't skipped
[Bug #22377]
When we statically resolve a `swap` we need to make sure the element
we reordered will r...
byroot (Jean Boussier)
04:10 AM Bug #22377: compile.c: `getlocal` not turned into `getlocal_WC_0`
Thanks for the repro, I think I know what's going on, I'll look into it. byroot (Jean Boussier)
05:36 AM Revision 0fab30f7 (git): compile.c: ensure swapped element isn't skipped
[Bug #22377]
When we statically resolve a `swap` we need to make sure the element
we reordered will receive its optimization pass.
byroot (Jean Boussier)
05:32 AM Revision 592f1ffd (git): Bump v3.4.11.
nagachika (Tomoyuki Chikanaga)
04:32 AM Bug #22340: Win32: File.stat succeeds on symbolic-link loops on Windows
ruby_3_4 commit:7bbe8e88007f8283a421cb31db86da32076126a6 merged revision(s) commit:ad23fd4a519fde4fc96c7326fb9b0347cbc347b8. nagachika (Tomoyuki Chikanaga)
04:32 AM Bug #22335: Stack corruption with >31 keyword args and refined Integer#==
ruby_3_4 commit:41e214d7100100a43c469e2628403d6916d1f0f8 merged revision(s) commit:d87ffb271a80fb108de3465d12ada829f3c130af. nagachika (Tomoyuki Chikanaga)
04:32 AM Bug #22330: heap uaf from string.encode()
ruby_3_4 commit:75309143a8494abd682bdd23f3b18ecc2e48a2e4 merged revision(s) commit:cb302881629f997f403e705425f69e5f6b0741ac, commit:c914aeb622ce7337223cd5c23f30daf9f7d3e7c4. nagachika (Tomoyuki Chikanaga)
04:31 AM Bug #22338: [Backport] win32: create directory symlinks for relative directory targets
ruby_3_4 commit:93d1c2d7c3782cfbe0448849bd2cb79ce66c3860 merged revision(s) commit:ee786598f10c6def72265fb7105fe505f563f52f, commit:54f254aa41eb624429e6b884c0a6381eeeac50d0, commit:15dbb08ba8b69877c8012e0f5950f3f26a3abffe, commit:249de20... nagachika (Tomoyuki Chikanaga)
04:30 AM Bug #22338: [Backport] win32: create directory symlinks for relative directory targets
MEMO: related commit hashes.
commit:ee786598f10c6def72265fb7105fe505f563f52f
commit:54f254aa41eb624429e6b884c0a6381eeeac50d0
commit:15dbb08ba8b69877c8012e0f5950f3f26a3abffe
commit:249de200d5be1f1d1f936e40949a6b48ac9b6e25
nagachika (Tomoyuki Chikanaga)
04:30 AM Revision 93d1c2d7 (git): merge revision(s) ee786598f10c6def72265fb7105fe505f563f52f, 54f254aa41eb624429e6b884c0a6381eeeac50d0, 15dbb08ba8b69877c8012e0f5950f3f26a3abffe, 249de200d5be1f1d1f936e40949a6b48ac9b6e25: [Backport #22338]
[PATCH] [Bug] win32: create directory symlinks for relative directory targets
File.symlink decided whether to create a directory symlink by calling
GetFileAttributesW on the target as given, which resolves a relative
...
nagachika (Tomoyuki Chikanaga)
04:27 AM Revision 41e214d7 (git): merge revision(s) d87ffb271a80fb108de3465d12ada829f3c130af: [Backport #22335]
[PATCH] [Bug #22335] Use identity hashes for keyword argument tracking
With more than 31 keyword arguments, tracking unevaluated defaults
uses an integer-keyed Hash whose collisions can invoke methods when
`Integ...
nagachika (Tomoyuki Chikanaga)
04:24 AM Revision 7bbe8e88 (git): merge revision(s) ad23fd4a519fde4fc96c7326fb9b0347cbc347b8: [Backport #22340]
[PATCH] [Bug #22340] Fix stat on symbolic-link loops on Windows
Preserve `ELOOP` instead of hiding symbolic-link resolution errors
with the file-enumeration fallback, so existence checks return false.
nagachika (Tomoyuki Chikanaga)
04:23 AM Revision 75309143 (git): merge revision(s) cb302881629f997f403e705425f69e5f6b0741ac, c914aeb622ce7337223cd5c23f30daf9f7d3e7c4: [Backport #22330]
[PATCH] Fix memory leak of transcoding when fallback raises
When the fallback function in transcode_loop raises, it will leak the memory
in rb_econv_t. The following script reproduces the leak:
10.times do
...
nagachika (Tomoyuki Chikanaga)
04:05 AM Revision 27be6ccd (git): ZJIT: Avoid creating IseqPayload on rb_zjit_iseq_free (#18953)
k0kubun (Takashi Kokubun)
02:41 AM Revision 8c0eb987 (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.87.16 to 2.87.17
- [Release notes](https://github.com/taiki-e...
dependabot[bot]
12:36 AM Revision bb382ae5 (git): Fix use-after-free in Time.new when string modified
The precision in Time.new calls to_int which can modify the string passed
into Time.new. This can cause an use-after-free. For example, the following
script crashes:
str = "2000-01-01 00:00:00" + "0" * 1_000_000
obj = Object.new...
peterzhu2118 (Peter Zhu)
12:03 AM Revision b20a1ab6 (git): [DOC] Harmonize file size methods
burdettelamar (Burdette Lamar)
12:02 AM Revision ffc14da7 (git): [DOC] Harmonize setuid? methods (#18965)
burdettelamar (Burdette Lamar)
12:01 AM Revision f016ece9 (git): [DOC] Harmonize setgid? methods (#18963)
burdettelamar (Burdette Lamar)

09/22/2026

11:20 PM Revision 59bd0509 (git): ZJIT: Change HasType into CondBranchHasType (#18633)
We use `HasType`+`CondBranch` a lot—it is how we do polymorphic dispatch in HIR—so it's pretty hot. Without smarter instruction fusion/instruction selection, this generates a lot of code. Kokubun identified this in https://github.com/Sho... Max Bernstein
11:17 PM Bug #22377 (Closed): compile.c: `getlocal` not turned into `getlocal_WC_0`
Missed by the "operands_unification" pass, somehow.
See 0023 below:
```text
$ ./miniruby --parser=parse.y --dump=insns -e '
assign = ->(outer) {
m = Module.new
m.set_temporar...
alanwu (Alan Wu)
10:15 PM Revision dcbf89e0 (git): ZJIT: Make LIR Abort a terminator (#18967)
It's an abrupt end to a block, but it definitely ends the block. No need
to put a return instruction after it.
Max Bernstein
09:37 PM Feature #22376 (Open): Undefine the allocator for Class
Uninitialized classes, created by `Class.allocate`, are a recurring source of bugs (most recently #22341). Every place that inspects a class's superclass chain has to check whether the class has been initialized, and it's easy to forget ... jhawthorn (John Hawthorn)
09:18 PM Revision 7e0d49ae (git): ZJIT: Add HIR comment to terminators too (#18890)
We previously only had this in `gen_insn` which left terminators
un-commented.
Max Bernstein
08:10 PM Bug #22375 (Open): `Time.new(String)` can disagree with itself about the date
`Time.new("2026-02-30T00:00:00Z")` returns a `Time` object that is internally inconsistent.
It shows as Feb 30 or Mar 2 depending on what methods are called:
```ruby
t = Time.new("2026-02-30T00:00:00Z") # => 2026-02-30 00:00:00 UTC
...
rwstauner (Randy Stauner)
07:52 PM Revision e77b7b6f (git): ZJIT: Specialize Struct class .new (#18835)
We can use `ObjectAllocClass` for Structs because they are basically
a `__members__` ivar lookup for sizing plus the default allocator.
Requires #18888 to make sure the constructor does not raise.
Max Bernstein
07:06 PM Revision bf4ab046 (git): [ruby/prism] Move PRISM_NODISCARD to the correct position, again
(https://github.com/ruby/prism/pull/4232)
Followup to https://github.com/ruby/prism/commit/ba16ae22561179998e4208e4c37262b47f693c11
I can't run rake `cargo:test`:
```
$ cargo build
Compiling ruby-prism-sys v1.9.0 (ruby-prism/rust/ru...
Earlopain (Earlopain _)
05:20 PM Bug #22188: addr2line doesn't find symbols when compiled with GCC LTO
It might be worth noting for anyone that wants to try this, if you do LTO with fat LTO objects and a static build (as described at the top) this will make native extension compilation much slower.

You can speed this up by stripping t...
rwstauner (Randy Stauner)
04:36 PM Revision 8d4efc14 (git): ZJIT: Elide Kernel#dup for more classes (#18872)
`rb_obj_dup` skips immediates:
```c
VALUE
rb_obj_dup(VALUE obj)
{
VALUE dup;
if (special_object_p(obj)) {
return obj;
}
// ...
}
static inline int
special_object_p(VALUE obj)
{
if (SPECIAL_CONST_P(obj)) re...
Max Bernstein
04:22 PM Bug #22342: IO#gets can ignore the limit argument in some edge cases
I've opened a GitHub PR for this: https://github.com/ruby/ruby/pull/18961 rhenium (Kazuki Yamaguchi)
04:19 PM Bug #22342 (Open): IO#gets can ignore the limit argument in some edge cases
`io.gets(rs, limit)` ignores the `limit` value and reads until `rs` is found or EOF, if the `limit`-th byte of the stream matches `rs`'s last byte and:
1. The potential start of the record separator, the `limit-rs.bytesize`-th byte of...
rhenium (Kazuki Yamaguchi)
03:08 PM Revision 720994eb (git): ZJIT: Fold Class#superclass (#18682)
I saw that YJIT has a fast-path for this so I figured we should too. Max Bernstein
02:58 PM Revision cec5c97b (git): [ruby/fileutils] Add tests for `FileUtils.options_of`
Fix https://github.com/ruby/fileutils/pull/195
https://github.com/ruby/fileutils/commit/b2d9b72739
nobu (Nobuyoshi Nakada)
02:58 PM Revision 6a2c8323 (git): [ruby/fileutils] Add tests for `FileUtils.options`
Fix https://github.com/ruby/fileutils/pull/194
https://github.com/ruby/fileutils/commit/8b1efe473e
nobu (Nobuyoshi Nakada)
02:58 PM Revision 7a34d74c (git): [ruby/fileutils] Add tests for `FileUtils.have_option?`
Fix https://github.com/ruby/fileutils/pull/193
https://github.com/ruby/fileutils/commit/6fd04f3cea
nobu (Nobuyoshi Nakada)
02:58 PM Revision ca501755 (git): [ruby/fileutils] Add tests for `FileUtils.commands`
Fix https://github.com/ruby/fileutils/pull/192
https://github.com/ruby/fileutils/commit/df83e4bb04
nobu (Nobuyoshi Nakada)
02:58 PM Revision ca76cabb (git): [ruby/fileutils] Add tests for `FileUtils.collect_method`
Fix https://github.com/ruby/fileutils/pull/191
https://github.com/ruby/fileutils/commit/ff78cfd3a4
nobu (Nobuyoshi Nakada)
02:58 PM Revision a809b598 (git): [ruby/fileutils] Use a missing target in the dangling symlink test
Windows reports self-referential links as existing, so use a missing
target to test a dangling link rather than a symbolic-link loop.
https://github.com/ruby/fileutils/commit/803fe3be07
nobu (Nobuyoshi Nakada)
02:58 PM Revision c433f977 (git): [ruby/fileutils] Test symbolic links and verify the `symlink` alias
Cover single, multiple, and dangling links through `ln_s`, keeping
valid-link tests available where dangling links are unsupported.
Fix https://github.com/ruby/fileutils/pull/190
https://github.com/ruby/fileutils/commit/189aefb679
nobu (Nobuyoshi Nakada)
02:58 PM Revision 52c1a16c (git): [ruby/fileutils] Test file removal and verify the `safe_unlink` alias
Cover removal of existing and missing files through `rm_f` and
verify the `safe_unlink` alias.
Fix https://github.com/ruby/fileutils/pull/189
https://github.com/ruby/fileutils/commit/902bcce36b
nobu (Nobuyoshi Nakada)
02:58 PM Revision 316b514d (git): [ruby/fileutils] Test tree removal and verify the `rmtree` alias
Cover removal of existing and missing trees through `rm_rf` and
verify the `rmtree` alias.
Fix https://github.com/ruby/fileutils/pull/188
https://github.com/ruby/fileutils/commit/07cc858f16
nobu (Nobuyoshi Nakada)
02:58 PM Revision 8e05d474 (git): [ruby/fileutils] Test file moves and verify the `move` alias
Check the result and effects of `mv` and verify the `move` alias.
Fix https://github.com/ruby/fileutils/pull/187
https://github.com/ruby/fileutils/commit/3bed6e74a1
nobu (Nobuyoshi Nakada)
02:58 PM Revision 142a7c45 (git): [ruby/fileutils] Test directory creation results and verify aliases
Check `mkdir_p` return values and verify the `makedirs` and `mkpath`
aliases without duplicating directory creation tests.
Fix https://github.com/ruby/fileutils/pull/186
https://github.com/ruby/fileutils/commit/72ff748e26
nobu (Nobuyoshi Nakada)
02:58 PM Revision e657f57f (git): [ruby/fileutils] Test hard-link identity and verify the `link` alias
Verify that `ln` creates hard links and that `link` remains an alias.
Fix https://github.com/ruby/fileutils/pull/185
https://github.com/ruby/fileutils/commit/46db9d557b
nobu (Nobuyoshi Nakada)
02:58 PM Revision b4188315 (git): [ruby/fileutils] Verify `getwd` as an alias of `pwd`
Avoid duplicating working-directory coverage already in `test_pwd`.
Fix https://github.com/ruby/fileutils/pull/183
https://github.com/ruby/fileutils/commit/d937a3d5ba
nobu (Nobuyoshi Nakada)
02:58 PM Revision cd35f4b6 (git): [ruby/fileutils] Test directory changes and verify the `chdir` alias
Cover directory changes, block behavior, and verbose output through
`cd`, and verify that `chdir` remains an alias.
Fix https://github.com/ruby/fileutils/pull/182
https://github.com/ruby/fileutils/commit/8476509760
nobu (Nobuyoshi Nakada)
02:58 PM Revision 54f5107f (git): [ruby/fileutils] Add tests for `FileUtils.compare_stream`
Fix https://github.com/ruby/fileutils/pull/181
https://github.com/ruby/fileutils/commit/4b041318e9
nobu (Nobuyoshi Nakada)
02:58 PM Revision 9ab64599 (git): [ruby/fileutils] Add file comparison tests and verify aliases
Cover equal and different file contents in `test_cmp` and verify
that `compare_file` and `identical?` remain aliases.
Fix https://github.com/ruby/fileutils/pull/180
Fix https://github.com/ruby/fileutils/pull/184
https://github.com/ruby...
nobu (Nobuyoshi Nakada)
02:51 PM Bug #22341: Class#superclass can crash the interpreter in debug build
Great catch! This is my mistake from https://github.com/ruby/ruby/commit/e01e89f55c82be8db5d8ccbf305ee38e3769e582
It should be safe to remove that assertion, but I also think it should probably be forbidden to include on an uninitiali...
jhawthorn (John Hawthorn)
02:20 PM Bug #22341 (Open): Class#superclass can crash the interpreter in debug build
While implementing this in ZJIT, @nirvdrum reported, and I investigated, a potential interpreter crash:
module M; end
C = Class.allocate
C.include M
C.superclass
In a debug build, this crashes:
plum% ./bui...
tekknolagi (Maxwell Bernstein)
02:34 PM Bug #22340 (Closed): Win32: File.stat succeeds on symbolic-link loops on Windows
Applied in changeset commit:git|ad23fd4a519fde4fc96c7326fb9b0347cbc347b8.
----------
[Bug #22340] Fix stat on symbolic-link loops on Windows
Preserve `ELOOP` instead of hiding symbolic-link resolution errors
with the file-enumeration f...
nobu (Nobuyoshi Nakada)
01:48 PM Bug #22340 (Closed): Win32: File.stat succeeds on symbolic-link loops on Windows
On Windows, `File.stat` succeeds on a self-referential symbolic link instead of raising `Errno::ELOOP`, and `File.exist?` returns `true`. Opening the same link raises `Errno::ELOOP`.
I noticed this while adding symbolic-link tests to...
nobu (Nobuyoshi Nakada)
01:56 PM Revision ad23fd4a (git): [Bug #22340] Fix stat on symbolic-link loops on Windows
Preserve `ELOOP` instead of hiding symbolic-link resolution errors
with the file-enumeration fallback, so existence checks return false.
nobu (Nobuyoshi Nakada)
01:48 PM Revision 7ba699ae (git): Make fibers RUBY_TYPED_THREAD_SAFE_FREE
Now fibers can be collected by multiple ractors at once when those Ractors
are running local GCs. Fibers are created in the Ractor that owns them, so
if multiple Ractors have unmarked fibers during local GC sweeping, we can
now collect t...
Luke Gruber
01:39 PM Revision 1070504b (git): Make non-Array Struct __members__ a bug (#18888)
We should not ever hit this from Ruby code; user code cannot modify
ivars that do not start with @.
This makes `num_members` leaf and therefore Struct class allocation also
leaf.
Max Bernstein
01:36 PM Revision ce75c108 (git): Allow disabling `zjit-stats` in tool/zjit_diff.rb (#18893)
When running benchmarks, sometimes there is a overhead in the statistics collection, so it can be useful to disable `zjit-stats`.
In my case I was investigating https://github.com/Shopify/ruby/issues/1051 and was confused why I was not ...
Rafael Mendonça França
09:39 AM Revision 5721bcee (git): merge revision(s) 1007084edc4251a778746ddbd80ac562526758d1: [Backport #9932]
[PATCH] Fix out-of-bounds in Array#permutation when array modified
Calling to_int on the count may run Ruby code that modifies the array.
This can cause an out-of-bounds in Array#permutation. For example, the
fol...
nagachika (Tomoyuki Chikanaga)
09:39 AM Revision c17e24d8 (git): merge revision(s) 88bfa3005cdc58515630ad4e2b3e9f9eb09563d4:
[PATCH] Fix buffer overflow in String#rpartition
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The conversion of the pattern to string can cause the string to b...
nagachika (Tomoyuki Chikanaga)
07:03 AM Revision d41370ae (git): Fix crash in Dir#each/each_child/scan when closed
If the Dir object is closed in the block of Dir#each/each_child/scan, then
it will crash because dirp->dir will be a NULL pointer. The following
script demonstrates the crash:
d = Dir.open("/")
d.each { d.close }
peterzhu2118 (Peter Zhu)
06:01 AM Revision 07027541 (git): [DOC] Mark up the man page references of `access` and `eaccess`
nobu (Nobuyoshi Nakada)
05:35 AM Revision 3a21e4b4 (git): [DOC] Fix `File::Stat` name
Also simplify the notation of the special const reserved words. nobu (Nobuyoshi Nakada)
05:04 AM Revision d1d487f4 (git): [DOC] Clarify that `File.exist?` follows symbolic links
Show that dangling symbolic links return false and clean up the
example files.
Follow up on ruby/ruby#18571.
nobu (Nobuyoshi Nakada)
03:10 AM Revision 1007084e (git): Fix out-of-bounds in Array#permutation when array modified
Calling to_int on the count may run Ruby code that modifies the array.
This can cause an out-of-bounds in Array#permutation. For example, the
following code crashes:
ary = (1..1_000).to_a
obj = Object.new
obj.define_singleto...
peterzhu2118 (Peter Zhu)
03:05 AM Revision 6723796d (git): [DOC] Harmonize path methods- #18936
burdettelamar (Burdette Lamar)
02:11 AM Revision 6454569c (git): Bump the github-actions group across 1 directory with 5 updates
Bumps the github-actions group with 5 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [ruby/setup-ruby](https://github.com/ruby/setup-ruby) | `1.323.0` | `1.324.0` |
| [github/codeql-action/init](https://github...
dependabot[bot]

09/21/2026

11:54 PM Revision 88bfa300 (git): Fix buffer overflow in String#rpartition
The conversion of the pattern to string can cause the string to be modified.
This can cause a buffer overflow since it uses the original length of the
string. For example, the following script reports a buffer overflow with
ASAN:
s ...
peterzhu2118 (Peter Zhu)
04:59 PM Revision 1f717ae3 (git): [ruby/mmtk] Always use fixed heap for testing against NoGC
https://github.com/ruby/mmtk/commit/3f94f904eb peterzhu2118 (Peter Zhu)
04:46 PM Bug #22339 (Open): Ruby::Box: crash / hang at VM shutdown with RUBY_FREE_AT_EXIT=1
## Summary
With `RUBY_BOX=1` and `RUBY_FREE_AT_EXIT=1`, Ruby crashes or hangs while freeing boxes at VM
shutdown. No user box needs to be created: the built-in boxes are enough.
`box_entry_free()` walks `box->classext_cow_classes`...
Eregon (Benoit Daloze)
04:20 PM Revision 9aea6bb2 (git): [DOC] Exclude `require` in RubyGems not to override the original
Fix ruby/rdoc#1592. nobu (Nobuyoshi Nakada)
03:58 PM Revision f07f65b7 (git): [PRISM] Source file no longer static literal
kddnewton (Kevin Newton)
02:42 PM Revision 41e04ff5 (git): [ruby/prism] Stop marking PM_SOURCE_FILE_NODE as static
Ref: https://bugs.ruby-lang.org/issues/17593.
Because `__FILE__` is currently considered a static literal,
it's entirely evaluated during compilation.
The problem is that ISeqs can be serialized and reloaded later,
but since `__FILE__`...
byroot (Jean Boussier)
02:33 PM Bug #22335: Stack corruption with >31 keyword args and refined Integer#==
Thank you for the prompt fix.
Not an area of ruby I'm very familiar with, but I think perhaps we should also be extending sp in `vm_callee_setup_arg` and `vm_call_iseq_setup_kwparm_kwarg`? Getting rid of the method dispatch fixes the ...
eapache_opslevel (Evan Huus)
01:55 PM Revision 61de3dd7 (git): [ruby/openssl] Make ruby/openssl types RUBY_TYPED_THREAD_SAFE_FREE
It's safe to free these types during Ractor-local GC in Ruby 4.1. We've
seen the freeing of this type show up in profiles before.
https://github.com/ruby/openssl/commit/e481c6408f
Co-authored-by: Kazuki Yamaguchi <k@rhe.jp>
Luke Gruber
12:40 PM Feature #22068: Adding post-quantum cryptography (PQC) support across Ruby standard libraries
Note that I sent PR to support SLH-DSA in ruby/openssl. However, I don't have a plan to add the SLH-DSA tests across the standard libraries except for ruby/openssl. Because I think SLH-DSA is a kind of unpopular PQC algorithm used for th... jaruga (Jun Aruga)
12:12 PM Bug #22204 (Closed): Kernel#require documentation pulls from RubyGems' version of method instead of core version (stable releases only)
I agree that this is worth backporting, I did https://github.com/ruby/ruby/pull/18945 for 4.0. Backport for 3.4 is fine too I guess, it someone wants to do it. Earlopain (Earlopain _)
12:01 PM Revision eb08b745 (git): [ruby/mmtk] Keep track of pending pages in RubyHeapTrigger
We need to keep track of pending pages in RubyHeapTrigger otherwise a large
allocation may cause infinite number of GCs to be ran since it will always
appear that we have enough space in the heap (and thus the heap won't grow)
but still ...
peterzhu2118 (Peter Zhu)
10:39 AM Bug #21870: Regexp: Warnings when using slightly overlapping \p{...} classes
@jneen you should probably open this as a PR to ruby, yes. The pr to upstream can happen after.
Currently ruby has no tests for duplicate character classes I think, so it would be nice to add some tests in that PR to show it still war...
Earlopain (Earlopain _)
09:14 AM Bug #22325 (Closed): out of bounds read in array
Applied in changeset commit:git|8befacf9e6c898a0f79dcb53bdd2e4cea24e0d1c.
----------
Guard against oob read in rb_ary_aref1
When the array is shrunk during rb_arithmetic_sequence_beg_len_step,
ary_subseq_len returns -1. Return an empty...
eightbitraptor (Matt V-H)
09:14 AM Revision 8befacf9 (git): Guard against oob read in rb_ary_aref1
When the array is shrunk during rb_arithmetic_sequence_beg_len_step,
ary_subseq_len returns -1. Return an empty array instead of passing the
negative length to ary_make_partial or ary_make_partial_step.
[Bug #22325]
eightbitraptor (Matt V-H)
09:10 AM Revision 09a5f2ef (git): [ruby/fileutils] Add tests for `FileUtils.touch`
Fix https://github.com/ruby/fileutils/pull/177
https://github.com/ruby/fileutils/commit/86278df2f7
nobu (Nobuyoshi Nakada)
08:58 AM Revision cf2b80c0 (git): [ruby/fileutils] Workaround for symlink bug on Windows
Fixed by ruby/ruby#17545.
https://github.com/ruby/fileutils/commit/9e957c2330
nobu (Nobuyoshi Nakada)
08:18 AM Revision 044f08d2 (git): merge revision(s) edce07a8c93895be8eeb2d27400aa138cc8a3cf9:
[PATCH] Fix use-after-free in String#% when array modified
If the array object passed into String#% is modified during conversion
(such as via to_s, to_i, to_f, etc.) then it can be a use-after-free if
the buffer...
nagachika (Tomoyuki Chikanaga)
08:16 AM Revision d8ada47f (git): merge revision(s) d4d078672943ffd3c344c431c631a8666a5a3226:
[PATCH] Fix out-of-bounds access in String#byteindex/byterindex
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
If the source string is modified when converting o...
nagachika (Tomoyuki Chikanaga)
07:22 AM Feature #18401 (Feedback): Rework `require_relative` to add the "current path" on `$LOAD_PATH`
vo.x (Vit Ondruch) wrote:
> My proposal is to change the `require_relative` in following way:
> ...
Do you mean `require_relative` should load the file in the current working directory?
I don't think it is reasonable behavior.
`requi...
nobu (Nobuyoshi Nakada)
07:03 AM Bug #22338 (Closed): [Backport] win32: create directory symlinks for relative directory targets
https://github.com/ruby/ruby/pull/17545
nobu (Nobuyoshi Nakada)
06:29 AM Revision d4d07867 (git): Fix out-of-bounds access in String#byteindex/byterindex
If the source string is modified when converting offset to an integer,
then there could be an out-of-bounds access because the length of the
string is captured before to_int is called. For example, the following
script triggers an ASAN e...
peterzhu2118 (Peter Zhu)
05:31 AM Feature #22274: Make `IO::Buffer` no longer experimental.
> Thanks, that makes sense. At the moment a locked buffer can be frozen, and #locked on a frozen buffer still increments lock_count, so I assume both will be handled as part of the implementation.
Correct :)
ioquatix (Samuel Williams)
05:26 AM Feature #22274: Make `IO::Buffer` no longer experimental.
ioquatix (Samuel Williams) wrote in #note-10:
> As per my design, a buffer that is frozen does not need to update or touch `locked_count` (in fact, only a buffer with `locked_count == 0` can be frozen). Once frozen, all operations (that...
himura467 (Akito Shitara)
05:10 AM Feature #22274: Make `IO::Buffer` no longer experimental.
ioquatix (Samuel Williams) wrote in #note-6:
> `freeze` is for "safe to share this Ruby object" and `readonly` means the backing buffer cannot be modified by this view.
As far as I know, there is currently no API to make an existing ...
himura467 (Akito Shitara)
04:58 AM Feature #22274: Make `IO::Buffer` no longer experimental.
> Even on a frozen buffer, #locked updates lock_count with a non-atomic read-modify-write, so two Ractors calling #locked on the same buffer would cause a data race on it. It seems that freezing alone is not sufficient for sharing.
As p...
ioquatix (Samuel Williams)
04:56 AM Feature #22274: Make `IO::Buffer` no longer experimental.
ioquatix (Samuel Williams) wrote in #note-6:
> Therefore, I'm against a frozen buffer meaning underlying memory cannot be modified.
If Matz agrees, I don't have a strong opinion on how freeze should be interpreted. However, under thi...
himura467 (Akito Shitara)
04:53 AM Feature #22274: Make `IO::Buffer` no longer experimental.
ioquatix (Samuel Williams) wrote in #note-6:
> For the purpose of sharing `IO::Buffer`, `freeze`ing this state is sufficient.
Even on a frozen buffer, `#locked` updates `lock_count` with a non-atomic read-modify-write, so two Ractors...
himura467 (Akito Shitara)
03:07 AM Revision 647e6e61 (git): [ruby/fileutils] Remove redundant condition
Since `Process.uid` returns `0` always on mingw or mswin, `root_in_posix?` returns `true` too.
https://github.com/ruby/fileutils/commit/d18fbf0c56
Nobuyoshi Nakada
03:07 AM Revision be820c30 (git): [ruby/fileutils] Skip test_rm_r_no_permissions test under root
Skip the test_rm_r_no_permissions test under the root user, as deletion always succeeds.
Signed-off-by: Jiaying Song <jiaying.song.cn@windriver.com>
https://github.com/ruby/fileutils/commit/3c831389c5
Jiaying Song
03:05 AM Revision 508ee642 (git): [ruby/fileutils] Skip chown tests when the target group is not assignable
In user-namespace environments (e.g. ChromeOS Crostini) getgroups(2) can report supplementary groups such as the overflow GID 65534 (nobody) that a non-root process cannot actually chgrp a file to. TestFileUtils#setup built @groups strai... takano32 (Mitsuhiro TAKANO)
02:59 AM Revision 0cb17e33 (git): [ruby/fileutils] Remove unused fu_copy_stream0 helper
fu_copy_stream0 has had no caller since b26846bf replaced both uses with direct IO.copy_stream calls in 2008. The retained private wrapper is unreachable.
https://github.com/ruby/fileutils/commit/feba38f651
Nikita Vasilevsky
02:57 AM Revision 26f43967 (git): [ruby/fileutils] Fix relative symlink target generation
https://github.com/ruby/fileutils/commit/7de921e801 karreiro (Guilherme Carreiro)
02:18 AM Revision 681d0f14 (git): Fix crash in String#tr when hash modified
String#tr can crash if keys are removed from the translation hash since
we stack allocate a buffer pairs. If entries are deleted during runtime,
then we won't fill the pairs buffer which can crash because it will be
reading uninitialized...
peterzhu2118 (Peter Zhu)
02:18 AM Revision f0281b7a (git): [DOC] Harmonize readlink methods
burdettelamar (Burdette Lamar)
02:17 AM Revision 961d6b15 (git): [DOC] Harmonize readable_real? methods
burdettelamar (Burdette Lamar)
02:14 AM Revision c8060834 (git): [DOC] Harmonize readable? methods
burdettelamar (Burdette Lamar)
02:13 AM Revision 741619cb (git): [DOC] Harmonize pipe? methods
burdettelamar (Burdette Lamar)
02:06 AM Revision 37e5c08b (git): [DOC] Harmonize owned? methods
burdettelamar (Burdette Lamar)
01:25 AM Feature #15833 (Rejected): Some refactors for shared-root array
wanabe (_ wanabe)
12:56 AM Feature #15833 (Closed): Some refactors for shared-root array
This ticket is too old wanabe (_ wanabe)

09/20/2026

11:50 PM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
Dan0042 (Daniel DeLorme) wrote in #note-8:
> Does the updated target version need to be backported to every branch ?
There is a similar case. Ruby 3.3 still says "Process::Status#& is deprecated and will be removed in Ruby 3.4", althoug...
shugo (Shugo Maeda)
05:17 PM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
> A major version bump is a chance to introduce incompatibilities, so I think we should decide for each deprecation whether to keep the schedule or to remove it at the major version.
Ok I see, that makes sense. It might also be useful...
Dan0042 (Daniel DeLorme)
08:26 PM Feature #22274: Make `IO::Buffer` no longer experimental.
ioquatix (Samuel Williams) wrote in #note-6:
> Implemented in [https://github.com/ruby/ruby/pull/18911](https://github.com/ruby/ruby/pull/18911)
Great, this will make semantics match more closely and ensure reliable behavior.
ioquatix ...
Eregon (Benoit Daloze)
03:15 PM Revision 466256eb (git): Tarballs should be able to build without dump_ast
nobu (Nobuyoshi Nakada)
02:05 PM Revision 991f17ea (git): Set non-exitent command to RUBY_DUMP_AST
Once all `*.rbinc` files have been generated, the command should not
be required anymore.
nobu (Nobuyoshi Nakada)
12:06 PM Revision edce07a8 (git): Fix use-after-free in String#% when array modified
If the array object passed into String#% is modified during conversion
(such as via to_s, to_i, to_f, etc.) then it can be a use-after-free if
the buffer of the array is freed.
This commit changes it to detect if the buffer has been cha...
peterzhu2118 (Peter Zhu)
10:48 AM Revision 87435fe2 (git): Enable the conforming MSVC preprocessor
Avoid incorrect variadic argument forwarding in `RUBY_ASSERT_MESG_WHEN`
by the traditional MSVC preprocessor, which breaks `VM_ASSERT` when
`RUBY_DEBUG` is enabled.
nobu (Nobuyoshi Nakada)
07:44 AM Revision 8c01a677 (git): merge revision(s) 05275662c43d76090e3545f93d231cf71c821fed:
[PATCH] Raise the ModGC `make check` timeout for MMTk to 90 minutes
MMTk's `make check` on macos-26 takes 27 minutes at the median and 37 at the 90th percentile, so the default 40 minute step limit sits inside the distribution o...
nagachika (Tomoyuki Chikanaga)
07:41 AM Revision b428fa8b (git): merge revision(s) 8482eb29e0cd7e72d980bf45376020345707e087:
[PATCH] Add timeout scale to macOS ModGC CI jobs
Same fix as commit 8e8682fc2312164c49d3bf4a15d1f464d2644598, which added
RUBY_TEST_TIMEOUT_SCALE=10 to all macOS check jobs in macos.yml but did
not cover modgc.ym...
nagachika (Tomoyuki Chikanaga)
06:35 AM Bug #22336: IO:Buffer Heap uaf
ruby_3_4 commit:bce3c89801d667a2cc38940228b8656f46879e7e merged revision(s) commit:b61da996afb02715cb16703a55f57c4417fd2d5b. nagachika (Tomoyuki Chikanaga)
06:35 AM Bug #22334: Assertion Failed: VM_ENV_FLAGS:FIXNUM_P(flags)
ruby_3_4 commit:350ef312531ac79eb2771f6d5cd242d720657d0b merged revision(s) commit:d7fe390c85d1a0aeda104026134d19b86199f9b7. nagachika (Tomoyuki Chikanaga)
06:34 AM Bug #22322: AddressSanitizer: use-after-poison in econv_description /ruby-src/build/../transcode.c
ruby_3_4 commit:b82e5058907869051d336449dd67f16b007ad7b8 merged revision(s) commit:20ca4e1f647107df1a5ae75b514f20b587091405. nagachika (Tomoyuki Chikanaga)
06:33 AM Bug #22319: heap buffer overflow triggered by array's zip function
ruby_3_4 commit:2a77c0f6f9ee7752a3594455bac24812d8aeba9d merged revision(s) commit:0c9f3f1e68e23a9ba2d7fdfdb86bd7ddcaf5e9d9. nagachika (Tomoyuki Chikanaga)
06:32 AM Bug #22318: heap uaf triggered in array.flatten
ruby_3_4 commit:3ebd235fb667e37b9f5cb4dcf61b19f07c4d2b34 merged revision(s) commit:5eeaedc3d3014a12264aa252c751e14ba0fc5507. nagachika (Tomoyuki Chikanaga)
06:31 AM Bug #22315: heap-use-after-free in String unpack with a block that mutates the receiver
ruby_3_4 commit:ce5cca10a5143da2ccea33a53190e39a6b923241 merged revision(s) commit:685144e3d60513ccde1c6cb4bed20597cb860002. nagachika (Tomoyuki Chikanaga)
06:30 AM Bug #22303: EncodingError from interpolating symbol crashes whole process
ruby_3_4 commit:cf53d1a7283dbe78830cabd9e72124208d8380d3 merged revision(s) commit:5831948a66412922e1abafd2c38fd6400e420581. nagachika (Tomoyuki Chikanaga)
06:28 AM Bug #22321: Assertion Failed: rb_vm_search_method_slowpath:RB_TYPE_2_P(klass, RUBY_T_CLASS, RUBY_T_ICLASS): klass: T_MODULE
ruby_3_4 commit:9bfc30e701db71c3bfec531422ebea7e2c1cdfb5 merged revision(s) commit:d38952c45e27becbe160f832aea823546899ad2e. nagachika (Tomoyuki Chikanaga)
06:26 AM Revision bce3c898 (git): merge revision(s) b61da996afb02715cb16703a55f57c4417fd2d5b: [Backport #22336]
[PATCH] [Bug #22336] Fix use-after-free in `IO::Buffer#get_string`. (#18919) nagachika (Tomoyuki Chikanaga)
06:26 AM Revision 350ef312 (git): merge revision(s) d7fe390c85d1a0aeda104026134d19b86199f9b7: [Backport #22334]
[PATCH] Fix crash when returning splat
[Bug #22334]
If we return a with a keyword splat, then each element does not necessarily
push two values onto the stack, so we cannot compile this as a simple sequence
...
nagachika (Tomoyuki Chikanaga)
06:26 AM Revision 9bfc30e7 (git): merge revision(s) d38952c45e27becbe160f832aea823546899ad2e: [Backport #22321]
[PATCH] Fix Method#inspect when klass is iclass
[Bug #22321]
In the following script, the klass of the Method object is an iclass, which
will raise an error "NoMethodError: undefined method 'inspect' for an inst...
nagachika (Tomoyuki Chikanaga)
06:26 AM Revision b82e5058 (git): merge revision(s) 20ca4e1f647107df1a5ae75b514f20b587091405: [Backport #22322]
[PATCH] [Bug #22322] Take transcoder names from declared transcoders
Fix use-after-free of dangling pointers.
nagachika (Tomoyuki Chikanaga)
06:26 AM Revision 2a77c0f6 (git): merge revision(s) 0c9f3f1e68e23a9ba2d7fdfdb86bd7ddcaf5e9d9: [Backport #22319]
[PATCH] Fix use-after-free when clearing array during zip
[Bug #22319]
Array#zip triggers an use-after-free it does not account for when the call
to rb_check_array_type modifies the source array. The following s...
nagachika (Tomoyuki Chikanaga)
06:26 AM Revision 3ebd235f (git): merge revision(s) 5eeaedc3d3014a12264aa252c751e14ba0fc5507: [Backport #22318]
[PATCH] Fix use-after-free when clearing array during flatten
[Bug #22318]
Array#flatten triggers an use-after-free it does not account for when the
call to rb_check_array_type modifies the source array. The fol...
nagachika (Tomoyuki Chikanaga)
06:26 AM Revision ce5cca10 (git): merge revision(s) 685144e3d60513ccde1c6cb4bed20597cb860002: [Backport #22315]
[PATCH] Fix crash when source string modified in String#unpack
[Bug #22315]
The following script crashes because there is a use-after-free on the
source string during String#unpack:
s = "C" * 400000...
nagachika (Tomoyuki Chikanaga)
06:18 AM Bug #22337: OOB write in array.pack()
The 'r/R' specifiers are added in 4.1. I suppose we don't have to backport this. nagachika (Tomoyuki Chikanaga)
06:08 AM Bug #22264: Warning missing from parse.y hash literals
ruby_3_4 commit:72aa33a12683d7e351ca406a4cad45e5f1f98e26 merged revision(s) commit:e5132b162737829f744b2b23908b9d08479db977. nagachika (Tomoyuki Chikanaga)
06:07 AM Bug #22259: Arrays sharding a buffer segfault when concatenating with each other
ruby_3_4 commit:1e1e90990c14805ee327630168360d3b6530aab3 merged revision(s) commit:46c287e2ca39da63d5164e2b7227308a41554c9a. nagachika (Tomoyuki Chikanaga)
05:26 AM Revision cf53d1a7 (git): merge revision(s) 5831948a66412922e1abafd2c38fd6400e420581: [Backport #22303]
[PATCH] Fix the `intern` VM instruction to be `leaf=false` (also in YJIT, ZJIT)
rb_str_intern can raise EncodingError and call its initializer.
This call can push a Ruby frame.
Fix in the VM, YJIT, and ZJIT.
nagachika (Tomoyuki Chikanaga)
05:09 AM Revision 72aa33a1 (git): merge revision(s) e5132b162737829f744b2b23908b9d08479db977: [Backport #22264]
[PATCH] [Bug #22264] Warn for duplicate keys after leading keyword splat
Leading keyword splats must not suppress duplicate literal key
warnings.
nagachika (Tomoyuki Chikanaga)
05:09 AM Revision 1e1e9099 (git): merge revision(s) 46c287e2ca39da63d5164e2b7227308a41554c9a: [Backport #22259]
[PATCH] 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
...
nagachika (Tomoyuki Chikanaga)
05:07 AM Bug #22265: `Thread#value` can return before the target thread completes after a spurious Fiber scheduler unblock
merged to rubu_3_4 at https://github.com/ruby/ruby/commit/c5a0ddafbbe1ad4477e6c9c60612d5b34ac41f01. nagachika (Tomoyuki Chikanaga)
01:21 AM Revision 5a4ccd91 (git): Fix use-after-free in String#each_line with separator modified
The separator can be modified in the block yielded by String#each_line.
When that happens, the pointer can change which can cause an use-after-free.
For example, the following script crashes:
sep = "x" * 1_000_000
s = "a#{sep}b#...
peterzhu2118 (Peter Zhu)
01:20 AM Revision d1786641 (git): [DOC] Doc for File.open (#18930)
burdettelamar (Burdette Lamar)
01:02 AM Revision 11bb12ad (git): [DOC] Doc for File.new - #18928
burdettelamar (Burdette Lamar)
12:17 AM Revision 241ea171 (git): [DOC] Doc for File.mkfifo
burdettelamar (Burdette Lamar)
12:16 AM Revision 9e1e000d (git): [DOC] Harmonize mtime methods
burdettelamar (Burdette Lamar)

09/19/2026

05:29 PM Bug #22335 (Closed): Stack corruption with >31 keyword args and refined Integer#==
Applied in changeset commit:git|d87ffb271a80fb108de3465d12ada829f3c130af.
----------
[Bug #22335] Use identity hashes for keyword argument tracking
With more than 31 keyword arguments, tracking unevaluated defaults
uses an integer-keye...
nobu (Nobuyoshi Nakada)
04:49 PM Revision 40d23240 (git): Refactor keyword parameter default handling
nobu (Nobuyoshi Nakada)
04:49 PM Revision d87ffb27 (git): [Bug #22335] Use identity hashes for keyword argument tracking
With more than 31 keyword arguments, tracking unevaluated defaults
uses an integer-keyed Hash whose collisions can invoke methods when
`Integer#==` is refined or redefined, corrupting argument locals above
`cfp->sp`. Use identity hashes...
nobu (Nobuyoshi Nakada)
12:28 PM Revision 44874b7e (git): Fix use-after-free in String#strip methods
The selector conversion may run aribtrary Ruby code and modify the source
string. This can cause a use-after-free if it resizes the source string.
For example, the following script causes corruption:
s = "-" * 1000 + "abc" + "-" * 1...
peterzhu2118 (Peter Zhu)
11:58 AM Feature #17593: load_iseq_eval should override the ISeq path
Seems there new movement on related changes but I wanted to add some thoughts.
__FILE__ as syntax rather than method eliminates a bunch of side effect behavior that makes __dir__ troublesome:
* It needs access to the caller frame o...
headius (Charles Nutter)
11:12 AM Revision 79c60fe7 (git): [DOC] Fix broken link (#18917)
burdettelamar (Burdette Lamar)
09:51 AM Revision f74cedf7 (git): Simplify `rb_obj_freeze`
The frozen check in `OBJ_FREEZE` makes the separate check redundant,
and immediate values are always frozen, so the old assertion is
unreachable.
nobu (Nobuyoshi Nakada)
09:51 AM Revision a323b13a (git): Skip already frozen objects in `RB_OBJ_FREEZE`
Avoid calling `rb_obj_freeze_inline` for already frozen objects,
including immediate values, to match `rb_obj_freeze` semantics.
nobu (Nobuyoshi Nakada)
09:51 AM Revision 92cef280 (git): Mark `rb_freeze_singleton_class` as internal
`rb_freeze_singleton_class` is an implementation detail of
`RB_OBJ_FREEZE`, so deprecate direct calls from extension libraries
before removing its public declaration in Ruby 4.2.
nobu (Nobuyoshi Nakada)
09:46 AM Revision ed470686 (git): Diagnose inactive SHSTK with CPU and glibc details
nobu (Nobuyoshi Nakada)
04:56 AM Feature #22274: Make `IO::Buffer` no longer experimental.
@matz
## Slices
Implemented in https://github.com/ruby/ruby/pull/18911
## Freeze
> freezing to mean that the object's own state is immutable
I agree with that. An `IO::Buffer`'s own state consists of:
```c
struct rb_io...
ioquatix (Samuel Williams)
04:34 AM Bug #22336 (Closed): IO:Buffer Heap uaf
Applied in changeset commit:git|b61da996afb02715cb16703a55f57c4417fd2d5b.
----------
[Bug #22336] Fix use-after-free in `IO::Buffer#get_string`. (#18919)
peterzhu2118 (Peter Zhu)
04:34 AM Revision b61da996 (git): [Bug #22336] Fix use-after-free in `IO::Buffer#get_string`. (#18919)
peterzhu2118 (Peter Zhu)
12:27 AM Bug #22326: heap buffer overflow in array.values_at()
Thank you for this bug report. I believe [this PR](https://github.com/ruby/ruby/pull/18870) should have fixed this bug. I will mark this issue for backport. peterzhu2118 (Peter Zhu)

09/18/2026

11:09 PM Bug #22337 (Closed): OOB write in array.pack()
Thank you for the bug report, I believe this has already been fixed [in this PR](https://github.com/ruby/ruby/pull/18884). I have marked this for backport. peterzhu2118 (Peter Zhu)
06:29 PM Bug #22337 (Closed): OOB write in array.pack()
Hi, I found a case that causes an oob write in array.pack()
PoC:
```
buf = "Z" * 4096
$buf = buf
evil = Object.new
def evil.to_int
$buf.replace("q")
123456789
end
[evil].pack("r", buffer: buf)
```
asan...
danielchong (Daniel Chong)
11:07 PM Bug #22336: IO:Buffer Heap uaf
Thank you for the bug report, I have [a fix here](https://github.com/ruby/ruby/pull/18919). peterzhu2118 (Peter Zhu)
04:22 PM Bug #22336 (Closed): IO:Buffer Heap uaf
Hello, a UAF is possible in IO:Buffer.
PoC:
```
$buf = IO::Buffer.new(64)
evil = Object.new
def evil.to_str
$buf.resize(64 * 1024 * 1024)
"UTF-8"
end
$buf.get_string(0, 32, evil)
```
ASAN (truncated):
```
ERROR...
danielchong (Daniel Chong)
10:19 PM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
Dan0042 (Daniel DeLorme) wrote in #note-6:
> Sorry for the trouble, but could you explain why "we should do anyway"? I might be missing something here.
A major version bump is a chance to introduce incompatibilities, so I think we shoul...
shugo (Shugo Maeda)
05:48 PM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
shugo (Shugo Maeda) wrote in #note-5:
> a year cannot be converted to a version at compile time.
I don't understand why converting a year to a version at compile time would be needed. We would need to compare `year >= RUBY_RELEASE_YE...
Dan0042 (Daniel DeLorme)
12:21 PM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
Thank you for the idea. I think the API should keep the version numbers, because the warning message has to tell users the version ("will be removed in Ruby 4.3"), and a year cannot be converted to a version at compile time.
A major ver...
shugo (Shugo Maeda)
10:54 AM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
I very much like the idea, but the issue with version numbers is that major version jumps break linear assumptions.
For example, in 2023 (Ruby 3.3), if we want to deprecate something in 3 years, we might target 3.6. But as Ruby jumped f...
Dan0042 (Daniel DeLorme)
04:50 AM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
I've created a pull request: https://github.com/ruby/ruby/pull/18904 shugo (Shugo Maeda)
01:42 AM Feature #22304: Add rb_warn_to_remove_at() for deprecation warnings shown by default
In addition, how about a higher-level macro that takes both versions of the schedule?
```c
rb_warn_scheduled_deprecation(4.2, 4.3, fmt, suggest, ...)
```
Before 4.2 it warns only when `Warning[:deprecated]` is enabled, from 4.2 it warn...
shugo (Shugo Maeda)
10:15 PM Bug #22334 (Closed): Assertion Failed: VM_ENV_FLAGS:FIXNUM_P(flags)
Applied in changeset commit:git|d7fe390c85d1a0aeda104026134d19b86199f9b7.
----------
Fix crash when returning splat
[Bug #22334]
If we return a with a keyword splat, then each element does not necessarily
push two values onto the stac...
peterzhu2118 (Peter Zhu)
06:08 AM Bug #22334: Assertion Failed: VM_ENV_FLAGS:FIXNUM_P(flags)
Thank you for the bug report, I have [a fix here](https://github.com/ruby/ruby/pull/18909). peterzhu2118 (Peter Zhu)
04:27 AM Bug #22334 (Closed): Assertion Failed: VM_ENV_FLAGS:FIXNUM_P(flags)
The following code:
```ruby
def r; return **[nil]; end; r()
```
Resulted in this output:
```
../vm_core.h:1554: Assertion Failed: VM_ENV_FLAGS:FIXNUM_P(flags)
ruby 4.1.0dev (2026-09-15T05:36:12Z master 3296d5c99c) +PRISM [x86_...
0599jiangyc@gmail.com (Yuancheng Jiang)
10:14 PM Revision d7fe390c (git): Fix crash when returning splat
[Bug #22334]
If we return a with a keyword splat, then each element does not necessarily
push two values onto the stack, so we cannot compile this as a simple sequence
of key-value pairs combined with newhash. The following script repro...
peterzhu2118 (Peter Zhu)
09:53 PM Revision 9f6f03ec (git): Make sure VM lock is acquired during GC when single_objspace_p()
Otherwise we can get assertion failures like:
```
TestGc#test_finalizer_not_run_with_vm_lock [/tmp/_actions-runner-working-dir/ruby/ruby/src/test/ruby/test_gc.rb:1055]:
pid 225354 killed by SIGABRT (signal 6)
| ../src/vm_sync.c:40: ...
Luke Gruber
06:51 PM Revision 97207692 (git): ZJIT: Fix a stale snapshot after merge race
I'll take a look at seeing if it's the intended change, but let me make
the CI green in the meantime.
k0kubun (Takashi Kokubun)
06:44 PM Feature #22297: Module#method_defined? should have an `include_private` argument
@matheusrich I considered a keyword argument, but went with positional for consistency.
This isn't yet in a released version, so feel free to come forward with a proposal to make these keyword arguments before the final 4.1 release.
...
byroot (Jean Boussier)
03:17 PM Feature #22297: Module#method_defined? should have an `include_private` argument
I dislike positional boolean args (see [#17938](https://bugs.ruby-lang.org/issues/17938)). I'm not aware of the performance impact, but would it be possible to use a kwarg here? matheusrich (Matheus Richard)
06:16 PM Revision a19a922f (git): YJIT: ZJIT: Abort faster when mmap(2) persistently fails in rb_jit_reserve_addr_space()
Previously, the loop condition checked the wrong direction so required
wrapping around the address space to break out the loop. It takes
a few seconds to do a few million mmap calls to loop around and then crash.
A way to test this is by...
alanwu (Alan Wu)
04:09 PM Revision a5fe554f (git): ZJIT: Wait a configured number of exits before invalidation (#18849)
k0kubun (Takashi Kokubun)
04:07 PM Revision 8fd6154c (git): ZJIT: Dispatch Symbol and Proc without a C call
k0kubun (Takashi Kokubun)
04:07 PM Revision 9f062cf4 (git): ZJIT: Remove the now-unused getblockparamproxy profiling
k0kubun (Takashi Kokubun)
04:07 PM Revision 2fba403d (git): ZJIT: Always inline every block handler case for getblockparamproxy
k0kubun (Takashi Kokubun)
03:33 PM Feature #22300: `Ractor.check_isolation`: report Ractor isolation violations as warnings instead of raising
I believe this would be a very valuable feature (we discussed that ~1 year ago), particularly for testing environments.
Right now testing that a given API is Ractor-compatible is very hard, an API like the one described would make it ...
byroot (Jean Boussier)
03:33 PM Revision 7525ed0b (git): The fallback to Object for alias in a module is deprecated
https://bugs.ruby-lang.org/issues/22276 nobu (Nobuyoshi Nakada)
03:02 PM Bug #22335 (Closed): Stack corruption with >31 keyword args and refined Integer#==
This is a messy one that originally surfaced as a flaky test in our Rails app, and required a lot of AI-assisted debugging to track down. This bug appears in the latest 4.0.7, though all of the original investigation was done against 3.3... eapache_opslevel (Evan Huus)
02:50 PM Revision 6e38174c (git): ZJIT: Specialize polymorphic sends with block literals (#18567)
Reduce polymorphic sends on lobsters by ~850k. Unfortunately,
`send_block_arg_not_nil` goes up by ~500k. So the net benefit here is
~350k. The `send_block_arg_not_nil` needs investigating.
Max Bernstein
02:39 PM Revision fb33630a (git): Get main Ractor to not take VM lock during local GC sweeping
Sweeping unshareables generally doesn't modify global VM data structures. The exception
is rb_free_generic_ivar, which modifies the generic_fields_tbl. However, that table has
its own mutex protecting it.
Luke Gruber
02:17 PM Revision 4552e472 (git): [DOC] Fix a typo
nobu (Nobuyoshi Nakada)
01:08 PM Bug #22333 (Closed): Assertion Failed: ary_resize_capa:RARRAY_LEN(ary) <= capacity
Applied in changeset commit:git|0cdc4562e580bb104e03fe97553548bf20eca6e2.
----------
Fix assertion error when calling Array#initialize
[Bug #22333]
If we call Array#initialize again, it may trigger an assertion error since
the length ...
peterzhu2118 (Peter Zhu)
05:19 AM Bug #22333: Assertion Failed: ary_resize_capa:RARRAY_LEN(ary) <= capacity
Thank you for the bug report, I have [a fix here](https://github.com/ruby/ruby/pull/18907). peterzhu2118 (Peter Zhu)
04:14 AM Bug #22333 (Closed): Assertion Failed: ary_resize_capa:RARRAY_LEN(ary) <= capacity
The following program:
```ruby
def assert_raise(*a) = (yield rescue nil)
MIN_SIZE = ENV.fetch('SMALL_ARRAY_MIN', 0).to_i
MAX_SIZE = ENV.fetch('SMALL_ARRAY_MAX', 16).to_i
ITERATIONS = ENV.fetch('SMALL_ARRAY_ITERATIONS', 100).to_i
...
0599jiangyc@gmail.com (Yuancheng Jiang)
01:08 PM Revision 0cdc4562 (git): Fix assertion error when calling Array#initialize
[Bug #22333]
If we call Array#initialize again, it may trigger an assertion error since
the length is not reset before the capacity is changed.
peterzhu2118 (Peter Zhu)
12:43 PM Bug #22324 (Closed): Pure attributes allow Clang to remove observable C API effects
Applied in changeset commit:git|85611dc266ff12ef7d311713f475ec1376f8ef86.
----------
[Bug #22324] APIs with observable side effects are not pure
nobu (Nobuyoshi Nakada)
12:43 PM Revision 85611dc2 (git): [Bug #22324] APIs with observable side effects are not pure
nobu (Nobuyoshi Nakada)
12:11 PM Revision 66c1d197 (git): [ruby/mmtk] Always use fixed heap for NoGC
Ruby and CPU heap doesn't make any sense when using the NoGC plan.
https://github.com/ruby/mmtk/commit/85f97bb0d9
peterzhu2118 (Peter Zhu)
08:02 AM Revision 7b2c30d6 (git): string.c: makes needles_count unsigned
Making `RBIMPL_ASSERT_OR_ASSUME(needles_count > 0);` redundant. byroot (Jean Boussier)
08:02 AM Revision f626f552 (git): string.c: use a const for the loop bound
GCC was emitting a warning, because it couldn't understand that
`search->needles_count` was assumed not to be 0:
```
string.c:9673:36: warning: ‘matches’ may be used uninitialized [-Wmaybe-uninitialized]
9673 | const in...
byroot (Jean Boussier)
07:40 AM Bug #22216: Special variables (ex. Regexp backref and IO lastline) are thread-unsafe in some cases, incompatible with Ractor
@headius
You're right - my bad — the isolation there is incidental, not a guarantee. If the frame is captured as a shared proc, threads race on it badly.
But I think that actually restates my point rather than refuting it. There is no ...
ioquatix (Samuel Williams)
07:03 AM Bug #22216: Special variables (ex. Regexp backref and IO lastline) are thread-unsafe in some cases, incompatible with Ractor
> I'd gently push back on this, because switching to a thread already does exactly that today, and has for 20 years:
This is not actually true. Your example works that way because a thread clones its block's immediate frame. If the fram...
headius (Charles Nutter)
04:16 AM Bug #22216: Special variables (ex. Regexp backref and IO lastline) are thread-unsafe in some cases, incompatible with Ractor
@headius
Just thinking out loud...
> Switching your code to a fiber shouldn't suddenly make them disappear, or should it?
I'd gently push back on this, because switching to a *thread* already does exactly that today, and has for...
ioquatix (Samuel Williams)
06:56 AM Revision 1c391eba (git): Do not flush the write buffer on close in sync mode. (#18902)
When a stream is in sync mode (`sync == true`), writes go straight to the
operating system and Ruby's write buffer is not authoritative. Any bytes
left in the write buffer are therefore the result of writes made while
sync was disabled.
...
Samuel Williams
06:18 AM Feature #22309: Allow super in a module method to work if method was called by refinement method super
@shugo Thank you for the recommendation for implementing this correctly. I used the approach you recommended, and it ended up being much simpler than I expected, even if there were a couple tricky parts. One of those was how to store the... jeremyevans0 (Jeremy Evans)
05:29 AM Revision ab5d140d (git): Fix buffer overflow in String#slice! when string modified
The following script causes a buffer overflow and returns corrupted strings
because it's reading past the end of the string buffer:
s = "x" + "l" * 3999
obj = Object.new
obj.define_singleton_method(:to_int) do
s.clear
...
peterzhu2118 (Peter Zhu)
05:27 AM Revision 3b26b003 (git): Flush coalesced data in `io_binwritev` under sync mode. (#18905)
`IO#write` with many arguments in sync mode was not observably atomic:
when the argument count exceeded `IOV_MAX`, the internal writev path
coalesced the trailing data into the write buffer and returned without
flushing, so nothing reach...
Samuel Williams
05:00 AM Revision 21a472e8 (git): [ruby/rubygems] Always require the vendored SecureRandom in Gem::AtomicFileWriter
`defined?(Gem::SecureRandom)` is already true while another thread is still loading the file and has not yet extended it with `Random::Formatter`, so a parallel installer worker could skip the require and fail with `NoMethodError` on `Ge... hsbt (Hiroshi SHIBATA)
04:26 AM Revision 801d2011 (git): [ruby/rubygems] Re-enable stdio capture tests under Ruby::Box
ruby/ruby#18574 makes $stdout and $stderr reassignment reach Kernel#puts and Kernel#warn inside a box. The box lanes run on a ruby-core master build, which has the fix.
https://bugs.ruby-lang.org/issues/21867
https://github.com/ruby/ru...
hsbt (Hiroshi SHIBATA)
04:15 AM Revision 9a9f3827 (git): Fix use-after-free in String#[]= when string modified
Fixes the following crash:
str = "hello" * 100
obj = Object.new
obj.define_singleton_method(:to_str) do
str.replace("")
"x"
end
str[/h.l/] = obj
peterzhu2118 (Peter Zhu)
03:36 AM Revision 11f6d3d6 (git): Flush buffered data in `BasicSocket#close_write` before shutdown. (#18900)
When a socket has buffered output (`sync == false`) and `#close_write` is
called, the write side was shut down via `shutdown(SHUT_WR)` without first
flushing the buffer. This had two bad consequences:
- the buffered bytes were silently ...
Samuel Williams
03:15 AM Revision c55886f9 (git): Remove VM lock acquire during finalize_list and run_final
Each objspace has its own finalizer list since RLGC landed so there aren't
concurrency issues here. This used to be a global table that all Ractors
shared. This affects only the default GC.
Luke Gruber
03:11 AM Bug #22330 (Closed): heap uaf from string.encode()
Applied in changeset commit:git|c914aeb622ce7337223cd5c23f30daf9f7d3e7c4.
----------
Fix use-after-free in String#encode when string modified
[Bug #22330]
The following script demonstrates a use-afer-free where we see corruption:
...
peterzhu2118 (Peter Zhu)
12:18 AM Bug #22330: heap uaf from string.encode()
Thank you for the bug report, I have [a fix here](https://github.com/ruby/ruby/pull/18899). peterzhu2118 (Peter Zhu)
03:11 AM Revision c914aeb6 (git): Fix use-after-free in String#encode when string modified
[Bug #22330]
The following script demonstrates a use-afer-free where we see corruption:
s = "あ" * 10_000
s.encode("US-ASCII", fallback: proc { |c| s.clear; "?" })
Raises may different errors such as:
"\xCB" followed by "\...
peterzhu2118 (Peter Zhu)
02:54 AM Revision 8d02a193 (git): [ruby/rubygems] Align RemoteFetcher#fetch_http redirects with the compact index fetcher
A relative Location died with `NoMethodError` because it was parsed on
its own instead of against the request URI, 308 fell through to "Bad
response", the non-https rejection printed the Location's credentials in
clear text, and an absol...
hsbt (Hiroshi SHIBATA)
02:54 AM Revision f9d2cd31 (git): [ruby/rubygems] Tolerate a URI without a host in ConnectionPools#no_proxy?
`net_http_args` calls `no_proxy?` whether or not a proxy is configured,
so a typo such as `https:/host` that URI parses with a nil host died with
`NoMethodError` instead of reaching the connection error that reports
the URI.
https://git...
hsbt (Hiroshi SHIBATA)
02:54 AM Revision 1d24919a (git): [ruby/rubygems] Treat an empty password as no password in Gem::Uri
`https://TOKEN:@host/` parses with an empty-string password, so `token?`
did not recognize it and `redacted` kept the token in clear text as
`https://TOKEN:REDACTED@host/`. `redact_credentials_from` also matched
the empty string and inse...
hsbt (Hiroshi SHIBATA)
02:36 AM Revision 5a8c2ac2 (git): [DOC] Update bundled gems list at 0772e42d0418cc4a138d8dfe7de936
git[bot]
02:35 AM Revision 0772e42d (git): Bump the github-actions group across 1 directory with 2 updates
Bumps the github-actions group with 2 updates in the / directory: [ruby/setup-ruby](https://github.com/ruby/setup-ruby) and [taiki-e/install-action](https://github.com/taiki-e/install-action).
Updates `ruby/setup-ruby` from 1.322.0 to ...
dependabot[bot]
02:33 AM Revision 2ec3ef4a (git): [ruby/rubygems] Drop the YAMLTree.create shim for psych older than 2.0
Psych::Visitors::YAMLTree.create has existed since psych 2.0, so the shim was never defined on any supported Ruby.
https://github.com/ruby/rubygems/commit/242ca5848b
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
02:33 AM Revision 49df6173 (git): [ruby/rubygems] Drop the fallbacks for openssl gems older than 2.2
Ruby 3.2 ships openssl 3.1, so PKey#public_to_der and SSLContext#min_version= are always available. get_public_key is documented to take a PKey, so the test that passed it a certificate now reads the key from the certificate directly.
h...
hsbt (Hiroshi SHIBATA)
02:33 AM Revision 44182010 (git): [ruby/rubygems] Drop feature detection for Ruby core methods older than 3.2
Symbol#name (3.0), Exception#detailed_message (3.2), Module#ruby2_keywords (2.7) and URI::Generic#hostname (1.9.3) exist on every supported Ruby, so the fallbacks were dead code.
https://github.com/ruby/rubygems/commit/ee203a9319
Co-Au...
hsbt (Hiroshi SHIBATA)
02:25 AM Revision b14e047f (git): [ruby/rubygems] Describe --major as preferring the latest major version
GemVersionPromoter sorts every candidate newest first under --major, and --strict does not cap it at any major, so "next major version" never matched what it does.
https://github.com/ruby/rubygems/issues/8090
https://github.com/ruby/ru...
hsbt (Hiroshi SHIBATA)
02:20 AM Bug #22283 (Closed): `defined?` does not see global variables assigned in a box
hsbt (Hiroshi SHIBATA)
02:12 AM Revision 51b39ee2 (git): [ruby/rubygems] Validate the version field in Gem::Installer#verify_spec
Gem::Specification#to_ruby interpolates the version into the `# stub:` comment without escaping, and #ensure_loadable_spec evals that output, so a line break in the version ends the comment and the rest runs as Ruby before the version it... hsbt (Hiroshi SHIBATA)
02:02 AM Revision e755b92a (git): Call dfree on non-thread-safe T_DATA with the VM barrier
When running multiple Ractors, we can't call dfree of a non-thread-safe
T_DATA while other Ractors are running or doing GC work. If there are multiple
Ractors, we save the T_DATA object's `dfree` and `data` pointer in an entry. Once
the ...
Luke Gruber
01:35 AM Bug #22273 (Open): Aliasing doesn't interact well with Module#prepend
Reopening, since this should stay open until removal occurs. jeremyevans0 (Jeremy Evans)
01:30 AM Bug #22273 (Closed): Aliasing doesn't interact well with Module#prepend
Applied in changeset commit:git|1c13d07cfca130ae3c0631d24ef21680099c02a7.
----------
Emit deprecation warning for aliasing method in prepended module
Aliasing a method in a prepended module can result in a super
call going into a desce...
jeremyevans (Jeremy Evans)
01:29 AM Revision abac8a5b (git): Update tests and specs for alias method in prepended module deprecation
jeremyevans (Jeremy Evans)
01:29 AM Revision 1c13d07c (git): Emit deprecation warning for aliasing method in prepended module
Aliasing a method in a prepended module can result in a super
call going into a descendant instead of an ancestor. Removal plan:
4.1: Deprecation warning
4.2: Warning even in non-verbose mode
4.3: Removal (target method lookup starts at...
jeremyevans (Jeremy Evans)
01:29 AM Revision 3ee17ab9 (git): Make Test::Unit stop aliasing method in prepended module
Ruby will be emitting a deprecation warning for this shortly. Switch
to using super instead of an alias.
jeremyevans (Jeremy Evans)
12:22 AM Revision ead87e3e (git): [ruby/rubygems] Keep the webauthn listener waiting when a connection carries no request
A browser that opens a connection and closes it without sending anything
left request_line nil, and the NoMethodError from splitting it took down
`gem signin` because the listener thread sets abort_on_exception. Close
such a connection a...
hsbt (Hiroshi SHIBATA)
12:22 AM Revision 07684367 (git): [ruby/rubygems] Never let the PQC probe server thread escape the probe
probe_pqc_handshake decides whether PQC works from the client side, but
its server thread only rescued OpenSSL errors. Anything else, a reset
included, was re-raised by the join in ensure, where the method's own
rescue no longer applies,...
hsbt (Hiroshi SHIBATA)
12:22 AM Revision ed08a3c6 (git): [ruby/rubygems] Keep the proxy test servers accepting after a client hangs up
The accept loop had no rescue at all, so a client that reset the
connection took it down with Errno::ECONNRESET and a client that hung up
without sending a request took it down with a NoMethodError on the nil
request line. Both then surf...
hsbt (Hiroshi SHIBATA)
12:22 AM Revision 89c8b8d3 (git): [ruby/rubygems] Keep the test SSL server accepting after a client resets
A client that dropped the connection mid handshake reached the accept
loop as Errno::ECONNRESET rather than OpenSSL::SSL::SSLError, so the
loop exited and stop_ssl_server re-raised it from join, turning teardown
into a test error. Window...
hsbt (Hiroshi SHIBATA)
12:22 AM Bug #22332 (Open): Ruby::Box: prelude is evaluated only in the master box, so pp and binding.irb load into it
Under `RUBY_BOX=1`, `Kernel#pp` prints but leaves nothing behind in the box that called it.
```
$ RUBY_BOX=1 ruby --disable-gems -W:no-experimental -e 'pp({a: 1}); p $LOADED_FEATURES.grep(/pp\.rb/).size, defined?(PP)'
{a: 1}
0
nil...
hsbt (Hiroshi SHIBATA)
12:21 AM Revision 05275662 (git): Raise the ModGC `make check` timeout for MMTk to 90 minutes
MMTk's `make check` on macos-26 takes 27 minutes at the median and 37 at the 90th percentile, so the default 40 minute step limit sits inside the distribution of successful runs. Of the 61 MMTk macos-26 `make check` failures in the 1000 ... hsbt (Hiroshi SHIBATA)
12:15 AM Bug #22331 (Open): Ruby::Box: a box's top self lacks the top-level definition methods
Under `RUBY_BOX=1`, loading a file into a box fails on `private`, `public`, `include`, `using`, `define_method` and `ruby2_keywords`.
```ruby
# toplevel.rb
private def hidden; end
puts "loaded"
```
```
$ RUBY_BOX=1 ruby -W:no-...
hsbt (Hiroshi SHIBATA)

09/17/2026

11:18 PM Bug #22216: Special variables (ex. Regexp backref and IO lastline) are thread-unsafe in some cases, incompatible with Ractor
ioquatix (Samuel Williams) wrote in #note-24:
> @matz
> ...
It's a lovely idea but a very specific exception to introduce. These variables are specified to live in the nearest method frame, with no consideration for fiber locality. Lots ...
headius (Charles Nutter)
10:50 PM Bug #22216: Special variables (ex. Regexp backref and IO lastline) are thread-unsafe in some cases, incompatible with Ractor
@matz
Fiber schedulers typically use `#transfer`, so preventing it would be problematic.
There is also an assumption being made that it's desirable for `svars` to leak out of enumerators, which may not always be the case, e.g.
...
ioquatix (Samuel Williams)
10:36 PM Revision 261685fd (git): Fix out-of-bounds in Array#pack for r/R when buffer modified
When the string buffer is modified during the to_int call in Array#pack
with the r/R directive, it can cause an out-of-bounds write. For example,
the following script crashes:
str = "x" * 10000
obj = Object.new
obj.define_si...
peterzhu2118 (Peter Zhu)
10:23 PM Bug #22280 (Closed): Ruby::Box breaks $? after Kernel#system / IO.popen
Applied in changeset commit:git|29c206dd5522e13cdc7329721552dab6ac079842.
----------
[Bug #22280] Mark $? and $$ as box-ready
They are readonly virtual variables backed by per-thread/per-process
state, but user boxes cached the first r...
hsbt (Hiroshi SHIBATA)
10:22 PM Revision 29c206dd (git): [Bug #22280] Mark $? and $$ as box-ready
They are readonly virtual variables backed by per-thread/per-process
state, but user boxes cached the first read in the box gvar_tbl. The
cache stores a clone, and cloning Process::Status does not copy the
wrapped struct, so $? after Ker...
hsbt (Hiroshi SHIBATA)
09:49 PM Revision ba91f184 (git): Fix defined? for global variables assigned in a box
Assignment in a box only writes to box->gvar_tbl and leaves the global
entry with rb_gvar_undef_getter, so defined?($foo) returned nil while
$foo itself returned the assigned value. mkmf's have_devel? stops its
own recursion with `unless...
hsbt (Hiroshi SHIBATA)
08:29 PM Bug #21867 (Closed): enabling Ruby::Box changes puts/warn to no longer use $stdout/$stderr
Applied in changeset commit:git|aca98ee9c7633ce0a1beffb605fc95c30837fb21.
----------
Mark stdio global variables as box-dynamic
$stdin, $stdout, $>, and $stderr live in ractor-local storage that
Kernel#puts, Kernel#warn, and friends re...
hsbt (Hiroshi SHIBATA)
08:29 PM Revision aca98ee9 (git): Mark stdio global variables as box-dynamic
$stdin, $stdout, $>, and $stderr live in ractor-local storage that
Kernel#puts, Kernel#warn, and friends read directly, so assignments
cached in the Box gvar_tbl were invisible to them. Bypass the cache
like `$_` so the real setter updat...
hsbt (Hiroshi SHIBATA)
07:05 PM Revision 0bdfb4c9 (git): ZJIT: Support getivar in multi-Ractor mode
jhawthorn (John Hawthorn)
06:36 PM Revision b3b675ea (git): ZJIT: Remove the eval("nil") VM boot idiom from tests
The test helpers now boot the VM themselves via ensure_rubyvm(), so tests
no longer need a bare eval("nil") just to initialize ZJITState before
calling assert_compiles* or inspect.
k0kubun (Takashi Kokubun)
06:36 PM Revision a71b1e37 (git): ZJIT: Boot the test VM lazily in helpers that touch ZJITState
k0kubun (Takashi Kokubun)
06:36 PM Revision 74ee88fb (git): ZJIT: Clear cfp->block_code before exposing a stub frame to the GC
k0kubun (Takashi Kokubun)
06:36 PM Revision 76e92234 (git): ZJIT: Set cfp->sp before exposing a stub frame to the GC
k0kubun (Takashi Kokubun)
05:33 PM Revision 3d70677f (git): string.c: fix off by one assertion
byroot (Jean Boussier)
04:33 PM Revision ab49f881 (git): Allow copying objects with a singleton class
Previously the Ractor courier rejected singleton class objects. However
we have existing tests of OpenStruct that those objects can be
Ractor-copied.
dup and clone, which were used prior to RLGC's merge, also just ignore
singleton class...
jhawthorn (John Hawthorn)
04:33 PM Revision dea2cdac (git): Remove marshal fallback for Ractor copy
The previous commit integrated Marshal's hooks into the native courier
copying path. That should cover most cases.
One exception I've noticed that this doesn't implement is singleton
classes which have been extended by modules. I would ...
jhawthorn (John Hawthorn)
04:33 PM Revision 1bd863dd (git): Use Marshal compat from Ractor courier
For some types (probably most notably Set), Marshal loading is defined
with compatibility functions. We should use those when set.
jhawthorn (John Hawthorn)
04:33 PM Revision 742699d2 (git): Support Marshal dump hooks in the Ractor courier
Previously the courier only carried the core types natively, and any
other object made the whole message fall back to Marshal.dump on the
sender and Marshal.load on the receiver. That serialized everything
reachable into bytes, so a Ract...
jhawthorn (John Hawthorn)
04:33 PM Revision 911809a8 (git): Add support for Regexp objects
Previously any Regexp objects being sent would cause us to take the
Marshal path.
jhawthorn (John Hawthorn)
04:33 PM Revision 13c1eb94 (git): Fill courier nodes in capture's post-order
Previously rb_ractor_courier_materialize filled every non-hash node in
id order and then inserted hash entries in a separate pass in reverse
id order, on the assumption that ids are assigned depth-first so a key
always has a larger id th...
jhawthorn (John Hawthorn)
04:00 PM Bug #22330 (Closed): heap uaf from string.encode()
Hello, a heap UAF seems possible in string's encode function.
PoC
```
s = "あ" * 4000
s.encode("US-ASCII",
fallback: proc { |c|
s.replace("Z" * (...
danielchong (Daniel Chong)
03:56 PM Feature #22329: Specify --disable-gem per Ruby Box
The PR to implement this feature with options:
* have only `disable_gems` to disable all of 4 gems
* respect the process-wide selection and leave RubyGems an others are not loaded if `--disable=gems` and `disable_gems: false` are speci...
tagomoris (Satoshi Tagomori)
03:12 PM Feature #22329 (Open): Specify --disable-gem per Ruby Box
Currently user boxes loads gems listed in the gem_prelude.rb if those gems are enabled in the process-wide.
There is just only way to disable gems in boxes: specify `--disable-gems` in the entire process.
This proposes a new keyword ...
tagomoris (Satoshi Tagomori)
03:51 PM Revision 99e1c066 (git): Fix Ractor._activated: don't use Module#prepend
Use aliasing instead of Module#prepend with super to redefine `require`
when coming out of single ractor mode. There are bad interactions
between Module#prepend and aliasing and we have seen bugs related to
this in Rails CI: https://bugs...
Luke Gruber
02:47 PM Revision 685aff92 (git): Update default gems list at cb7e0e62e255ce3622108bcd6934b3 [ci skip]
git[bot]
02:46 PM Revision cb7e0e62 (git): [ruby/io-console] bump up to 0.9.4
https://github.com/ruby/io-console/commit/a44ab18ad9 nobu (Nobuyoshi Nakada)
02:46 PM Revision dd70e808 (git): [ruby/io-console] Detect the old style `ttyname_r` return type
https://github.com/ruby/io-console/commit/668e5d85bb nobu (Nobuyoshi Nakada)
02:12 PM Revision 6954f692 (git): ZJIT: Add validation pass for reducibility (#18754)
Based on [ART's](https://android.googlesource.com/platform/art/+/refs/heads/main/compiler/optimizing/nodes.cc#999):
```c++
bool HLoopInformation::HasBackEdgeNotDominatedByHeader() const {
for (HBasicBlock* back_edge : GetBackEdges()) ...
Max Bernstein
12:35 PM Bug #22273: Aliasing doesn't interact well with Module#prepend
Besides the fundamental semantics of aliasing + prepending, I would like to stress that we have here yet another use case of Kernel#require decoration.
I don't want to hijack the ticket, but would like to leverage it to ask you: Don't...
fxn (Xavier Noria)
10:36 AM Revision 41c9fdd6 (git): Fix warning in tr_trans_pairs_search_sse2
string.c:9673:36: warning: ‘matches’ may be used uninitialized [-Wmaybe-uninitialized]
9673 | const int bitmap = _mm_movemask_epi8(matches[0]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
str...
peterzhu2118 (Peter Zhu)
09:18 AM Revision f6c2489b (git): Test that `up` leaves a default gem repository on its own branch
`update_default_gems` had no coverage, so nothing pinned the one thing it must not do to a gem checkout: swap it over to the ruby/ruby tree. The fixture drives it against local repositories, so the fetch it still needs stays offline.
Co...
hsbt (Hiroshi SHIBATA)
09:18 AM Revision 7860a3bf (git): Stop swapping the working tree to maintain a ruby-core branch
`up` checked out ruby-core in every default gem repository to rebase it onto ruby-core/master and then checked the default branch back out, which walks the whole ruby/ruby tree twice per gem for a branch that nothing in this file reads. ... hsbt (Hiroshi SHIBATA)
08:36 AM Revision cf5f81a8 (git): Exclude ext/json/depend from the json sync
ruby/ruby owns this file along with ext/json/extconf.rb, which is already
excluded. Upstream json has no ext/json/ext/depend to copy back, so a
whole-tree sync deleted it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
08:28 AM Bug #22328 (Open): Should IO#wait_priority be deprecated and then removed?
In #18655, IO#wait_readable, IO#wait_writable, IO#wait_priority, and IO#wait were moved from io/wait into core.
However, in #18655 note 11, Matz wrote:
> After the discussion, we will drop wait_priority, but others are accepted.
htt...
sampokuokkanen (Sampo Kuokkanen)
07:26 AM Revision 11f57c63 (git): Fix out-of-bounds in Array#sample when array modified
The call to rand (through RAND_UPTO) or to_int (through NUM2LONG) can run
aribtrary Ruby code, which can modify the source array. The size of the
array may shrink, which could cause an out-of-bounds read on the array.
We do check again t...
peterzhu2118 (Peter Zhu)
07:00 AM Revision 22fda5cc (git): [DOC] Update bundled gems list at 91810913bd418c066ee77117642275
git[bot]
05:32 AM Revision 91810913 (git): Update default gems list at 9099b5f81a66db870ee56c1785913f [ci skip]
git[bot]
05:31 AM Revision 9099b5f8 (git): [ruby/resolv] v0.8.0
https://github.com/ruby/resolv/commit/99464a354c hsbt (Hiroshi SHIBATA)
05:19 AM Revision 85ca639f (git): [ruby/resolv] Fail over when writing a request finds the TCP peer gone
A peer that goes away while another nameserver is being tried leaves a socket nobody is watching, so the loss only surfaces when the next request is written to it, as Errno::EPIPE. Config#resolv moves on to the next nameserver for Resolv... hsbt (Hiroshi SHIBATA)
05:19 AM Revision e7d0f914 (git): [ruby/resolv] Share the truncated UDP reply between the TCP fallback tests
Three tests carry the same hand built reply, and the tests below need a
fourth.
https://github.com/ruby/resolv/commit/d01450fd36
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hsbt (Hiroshi SHIBATA)
05:10 AM Bug #22323: Incorrect nonnull contract changes rb_typeddata_inherited_p(NULL, NULL) behavior
Oh I see the point. Thank you for the clarification and commit! yqtian (Yongqiang Tian)
04:53 AM Bug #22323 (Closed): Incorrect nonnull contract changes rb_typeddata_inherited_p(NULL, NULL) behavior
Applied in changeset commit:git|b9d4fd7108b353fd58717c556757f0bce746c4cc.
----------
[Bug #22323] [DOC] Remove a stale internal note for typed data
Neither argument to `rb_typeddata_inherited_p` is intended to be NULL.
nobu (Nobuyoshi Nakada)
03:39 AM Bug #22323: Incorrect nonnull contract changes rb_typeddata_inherited_p(NULL, NULL) behavior
Neither argument is intended to be NULL. The `nonnull` annotation was added in 72627d85e337e5d8c7fa5738dc4ec7f253f0738e, which also annotated `RTYPEDDATA_TYPE` with `RBIMPL_ATTR_RETURNS_NONNULL()`. The expected `child` argument is the ... nobu (Nobuyoshi Nakada)
01:19 AM Bug #22323: Incorrect nonnull contract changes rb_typeddata_inherited_p(NULL, NULL) behavior
Thank you. By “the explicit equality behavior,” I meant this check at the
beginning of the inline implementation:
if (RB_LIKELY(child == parent))
return true;
The current header therefore gives three conflicting signa...
yqtian (Yongqiang Tian)
01:14 AM Bug #22323: Incorrect nonnull contract changes rb_typeddata_inherited_p(NULL, NULL) behavior
Thank you for the report.
yqtian (Yongqiang Tian) wrote:
> Could you confirm whether `(NULL, NULL)` is an intended input for this
> ...
I don't think it is intended.
What do you mean by "the explicit equality behavior"?
nobu (Nobuyoshi Nakada)
05:08 AM Revision f4e25e08 (git): [ruby/resolv] Deduplicate the generated candidate list
Label.split maps both "." and "" to the root label list, so a resolv.conf
carrying `search .` produces a search entry that reproduces the absolute name.
Tidying up ndots handling dropped the include?(fname) guard that used to
suppress th...
hsbt (Hiroshi SHIBATA)
05:08 AM Revision d7b25641 (git): [ruby/resolv] Tidy up ndots handling
The current code works, but the intention was not clear at first glance.
https://github.com/ruby/resolv/commit/deaf5ab649
rhenium (Kazuki Yamaguchi)
05:08 AM Revision d8748167 (git): [ruby/resolv] Fix querying absolute domain name twice
When search list is not explicitly specified, Resolv::DNS checks the
local domain name of the running system. If it is not set either, the
root domain ['.'] is used.
This is conceptually correct, but the code handles the absolute name
s...
rhenium (Kazuki Yamaguchi)
05:08 AM Revision ece2ae9c (git): [ruby/resolv] Update test code for Resolv::DNS::Config ndots
Add more assertions to actually test that the ndots option is working
as expected: the option controls the threshold that the search list
should be attempted earlier or later.
https://github.com/ruby/resolv/commit/a6b5856ef4
rhenium (Kazuki Yamaguchi)
04:05 AM Bug #22276 (Assigned): alias in a module falls back to Object even in classes not inheriting from Object
I've added a verbose-mode warning: https://github.com/ruby/ruby/pull/18740 shugo (Shugo Maeda)
04:01 AM Revision b9d4fd71 (git): [Bug #22323] [DOC] Remove a stale internal note for typed data
Neither argument to `rb_typeddata_inherited_p` is intended to be NULL. nobu (Nobuyoshi Nakada)
04:01 AM Revision 159000ed (git): Skip CI on documentation only changes
nobu (Nobuyoshi Nakada)
03:37 AM Revision 1c0b1be0 (git): Deprecate the fallback to Object for alias in a module
`alias` and `Module#alias_method` in a module fall back to searching
the method from Object when the module and its ancestors do not have
it. The fallback assumes Object is the root class, which is no longer
true since BasicObject was in...
shugo (Shugo Maeda)
03:31 AM Revision 6dabc1cf (git): Update default gems list at 028dcaa3c9513aa61903989b979e41 [ci skip]
git[bot]
03:30 AM Revision 028dcaa3 (git): [ruby/net-protocol] v0.4.0
https://github.com/ruby/net-protocol/commit/c1f66145f7 hsbt (Hiroshi SHIBATA)
03:25 AM Revision 3ec14b6c (git): [ruby/net-protocol] Test that an exception out of a message leaves the IO usable
LOG_off had no counterpart on the exception path, so a raise from the
block or from the source silenced the connection's debug_output for
good. The two success cases go with them because the restructure
rewrote the method that had no cov...
hsbt (Hiroshi SHIBATA)
03:25 AM Revision 550591bb (git): [ruby/net-protocol] Restore message logging and clear write state on exceptional exits
https://github.com/ruby/net-protocol/commit/a1bd220aad Oskar Eichler
03:25 AM Revision 4de94093 (git): [ruby/net-protocol] Test that write0 honours a :wait_readable from the socket
The case had no branch for it, so the retry loop spun without waiting
and without ever reaching the write_timeout. The fake refuses the write
until it has been waited on, which turns a regression into a failure
rather than a hang.
https...
hsbt (Hiroshi SHIBATA)
03:25 AM Revision d9c88e84 (git): [ruby/net-protocol] Wait for readability when an SSL write requests it
https://github.com/ruby/net-protocol/commit/85361b97cd Oskar Eichler
03:25 AM Revision 6c50cf8a (git): [ruby/net-protocol] Test that a negative read length leaves the buffer alone
Before the check, read(-1) walked @rbuf_offset backwards and a later
read_all handed back bytes an earlier read had already consumed.
https://github.com/ruby/net-protocol/commit/d89c7b148b
Co-Authored-By: Claude Opus 5 <noreply@anthrop...
hsbt (Hiroshi SHIBATA)
03:25 AM Revision 48c7a6ae (git): [ruby/net-protocol] Reject negative read lengths before changing the buffer
https://github.com/ruby/net-protocol/commit/44b2dcb2f4 Oskar Eichler
02:33 AM Revision e6ec1555 (git): [DOC] Update bundled gems list at b06e76429cd6a79505bbc647e2d342
git[bot]
02:31 AM Revision b06e7642 (git): Bump ruby/setup-ruby in the github-actions group across 1 directory
Bumps the github-actions group with 1 update in the / directory: [ruby/setup-ruby](https://github.com/ruby/setup-ruby).
Updates `ruby/setup-ruby` from 1.321.0 to 1.322.0
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- ...
dependabot[bot]
01:19 AM Revision 16abdbdf (git): Fix out-of-bounds in String#setbyte when string modified
The call to rb_to_int may run aribtrary Ruby code and thus cause String#setbyte
to read past the end of the string. For example, the following script crashes:
s = "a" * 10_000_000
obj = Object.new
obj.define_singleton_method...
peterzhu2118 (Peter Zhu)
01:01 AM Bug #21703: RUBY_CRASH_REPORT does not work when shelling out in some cases
ruby_3_3 commit:52c54450f9acf0762089e21f0338dc393ec547ef merged revision(s) commit:190b017fc6c21ff7b61c2b5ece0294785e4a4ca2. hsbt (Hiroshi SHIBATA)
12:57 AM Bug #22311: Build crashes on macOS 26 with the macOS 27 SDK because pipe2() and dup3() are unavailable
ruby_3_3 commit:0c8ab2a111722f38b58738dd3d8fb77b79c11249, ruby_3_4 commit:5a42e10000e344f2143b772b18b700a9f8e3c9cf and ruby_4_0 commit:d50f404ca12c04e8bc3e8dd805879a660258b5c4 merged revision(s) commit:6bfde8d2a239a9e8549de1ae29acecdefdf... hsbt (Hiroshi SHIBATA)
12:54 AM Revision 0c8ab2a1 (git): [Bug #22311] Check the availability of APIs added in macOS 27
To account for cases where binaries for older OS versions are built
using the new SDK, check at runtime whether the API functions are
available actually.
nobu (Nobuyoshi Nakada)
12:54 AM Revision 52c54450 (git): Don't use non blocking pipes for RUBY_CRASH_REPORT
[Bug #21703]
RUBY_CRASH_REPORT does not work in some cases when shelling out on Linux.
For example, given the following shell script dump.sh:
#!/usr/bin/env bash
cat > /tmp/crash
And we see it fails like this:
$ RUBY_CRAS...
peterzhu2118 (Peter Zhu)
12:54 AM Revision fead12a3 (git): Use `assert_crash_report` in `test_crash_report_pipe`
Instead of using `assert_in_out_err` directly. nobu (Nobuyoshi Nakada)
12:54 AM Revision 94b8dbc1 (git): Fix crash report path test on Windows
nobu (Nobuyoshi Nakada)
12:54 AM Revision 176b4c14 (git): Fix to use `assert_crash_report` results
nobu (Nobuyoshi Nakada)
12:51 AM Bug #22174: Set operations (&, ^, collect!, flatten, classify, divide) do not preserve compare_by_identity
OK. I submitted https://github.com/ruby/ruby/pull/18848 to fix this in master (same as https://github.com/ruby/ruby/pull/17633 but squashed and with fixed specs). It leaves Ruby 4.0 behavior unspecified. After it is merged, I'll submit ... jeremyevans0 (Jeremy Evans)
12:51 AM Revision 548b5abc (git): Haiku: use ucontext.h only on x86/x86-64
This follows the other operating systems. Without it, it won't build on arm64 and riscv64 ports. Przemysław Buczkowski
12:32 AM Bug #22327 (Open): RubyVM::ZJIT.reset_stats! aborts the process (Rust panic) when ZJIT is not enabled
`RubyVM::ZJIT.reset_stats!` aborts the whole process with a Rust panic when it is called while ZJIT is not enabled. The other stats methods (`stats`, `stats_string`, `stats_enabled?`) just return `nil`/`false` in the same situation, and ... znz (Kazuhiro NISHIYAMA)
12:01 AM Revision 3f614371 (git): Fix buffer overflow in Array#values_at
Array#values_at can execute arbitrary code during execution which may
modify the source array. This can cause a buffer overflow if the new length
of the array has decreased. The following script crashes:
a = (0..100_000).to_a
ob...
peterzhu2118 (Peter Zhu)
 

Also available in: Atom