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 } -
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... -
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.
-
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. -
05:32 AM Revision 592f1ffd (git): Bump v3.4.11.
-
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.
-
04:32 AM Bug #22335: Stack corruption with >31 keyword args and refined Integer#==
- ruby_3_4 commit:41e214d7100100a43c469e2628403d6916d1f0f8 merged revision(s) commit:d87ffb271a80fb108de3465d12ada829f3c130af.
-
04:32 AM Bug #22330: heap uaf from string.encode()
- ruby_3_4 commit:75309143a8494abd682bdd23f3b18ecc2e48a2e4 merged revision(s) commit:cb302881629f997f403e705425f69e5f6b0741ac, commit:c914aeb622ce7337223cd5c23f30daf9f7d3e7c4.
-
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...
-
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 -
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
... -
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... -
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. -
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
... -
04:05 AM Revision 27be6ccd (git): ZJIT: Avoid creating IseqPayload on rb_zjit_iseq_free (#18953)
- 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... -
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... -
12:03 AM Revision b20a1ab6 (git): [DOC] Harmonize file size methods
-
12:02 AM Revision ffc14da7 (git): [DOC] Harmonize setuid? methods (#18965)
-
12:01 AM Revision f016ece9 (git): [DOC] Harmonize setgid? methods (#18963)
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...
-
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... - 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. -
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 ...
- 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. -
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
... - 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. -
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... -
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... - 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... -
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
-
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... - 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.
-
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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... -
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... -
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... -
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... -
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... -
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. - 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... - 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. - 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 ... -
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... -
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... -
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 } -
06:01 AM Revision 07027541 (git): [DOC] Mark up the man page references of `access` and `eaccess`
-
05:35 AM Revision 3a21e4b4 (git): [DOC] Fix `File::Stat` name
- Also simplify the notation of the special const reserved words.
-
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. -
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... -
03:05 AM Revision 6723796d (git): [DOC] Harmonize path methods- #18936
- 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...
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 ... -
04:59 PM Revision 1f717ae3 (git): [ruby/mmtk] Always use fixed heap for testing against NoGC
- https://github.com/ruby/mmtk/commit/3f94f904eb
-
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`... -
04:20 PM Revision 9aea6bb2 (git): [DOC] Exclude `require` in RubyGems not to override the original
- Fix ruby/rdoc#1592.
-
03:58 PM Revision f07f65b7 (git): [PRISM] Source file no longer static literal
-
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__`... -
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 ... - 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> -
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...
-
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.
-
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 ... -
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... -
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... -
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] -
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 -
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 -
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... -
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... -
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... -
07:03 AM Bug #22338 (Closed): [Backport] win32: create directory symlinks for relative directory targets
- https://github.com/ruby/ruby/pull/17545
-
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... -
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 :) -
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... -
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 ... -
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... -
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... -
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... - 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 - 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 -
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...
- 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 -
02:57 AM Revision 26f43967 (git): [ruby/fileutils] Fix relative symlink target generation
- https://github.com/ruby/fileutils/commit/7de921e801
-
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... -
02:18 AM Revision f0281b7a (git): [DOC] Harmonize readlink methods
-
02:17 AM Revision 961d6b15 (git): [DOC] Harmonize readable_real? methods
-
02:14 AM Revision c8060834 (git): [DOC] Harmonize readable? methods
-
02:13 AM Revision 741619cb (git): [DOC] Harmonize pipe? methods
-
02:06 AM Revision 37e5c08b (git): [DOC] Harmonize owned? methods
-
01:25 AM Feature #15833 (Rejected): Some refactors for shared-root array
-
12:56 AM Feature #15833 (Closed): Some refactors for shared-root array
- This ticket is too old
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... -
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... -
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 ... -
03:15 PM Revision 466256eb (git): Tarballs should be able to build without dump_ast
-
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. -
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... -
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. -
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... -
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... -
06:35 AM Bug #22336: IO:Buffer Heap uaf
- ruby_3_4 commit:bce3c89801d667a2cc38940228b8656f46879e7e merged revision(s) commit:b61da996afb02715cb16703a55f57c4417fd2d5b.
-
06:35 AM Bug #22334: Assertion Failed: VM_ENV_FLAGS:FIXNUM_P(flags)
- ruby_3_4 commit:350ef312531ac79eb2771f6d5cd242d720657d0b merged revision(s) commit:d7fe390c85d1a0aeda104026134d19b86199f9b7.
-
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.
-
06:33 AM Bug #22319: heap buffer overflow triggered by array's zip function
- ruby_3_4 commit:2a77c0f6f9ee7752a3594455bac24812d8aeba9d merged revision(s) commit:0c9f3f1e68e23a9ba2d7fdfdb86bd7ddcaf5e9d9.
-
06:32 AM Bug #22318: heap uaf triggered in array.flatten
- ruby_3_4 commit:3ebd235fb667e37b9f5cb4dcf61b19f07c4d2b34 merged revision(s) commit:5eeaedc3d3014a12264aa252c751e14ba0fc5507.
-
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.
-
06:30 AM Bug #22303: EncodingError from interpolating symbol crashes whole process
- ruby_3_4 commit:cf53d1a7283dbe78830cabd9e72124208d8380d3 merged revision(s) commit:5831948a66412922e1abafd2c38fd6400e420581.
-
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.
-
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)
-
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
... -
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... -
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. -
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... -
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... -
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... -
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.
-
06:08 AM Bug #22264: Warning missing from parse.y hash literals
- ruby_3_4 commit:72aa33a12683d7e351ca406a4cad45e5f1f98e26 merged revision(s) commit:e5132b162737829f744b2b23908b9d08479db977.
-
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.
-
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. -
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. -
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
... -
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.
-
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#... -
01:20 AM Revision d1786641 (git): [DOC] Doc for File.open (#18930)
-
01:02 AM Revision 11bb12ad (git): [DOC] Doc for File.new - #18928
-
12:17 AM Revision 241ea171 (git): [DOC] Doc for File.mkfifo
-
12:16 AM Revision 9e1e000d (git): [DOC] Harmonize mtime methods
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... -
04:49 PM Revision 40d23240 (git): Refactor keyword parameter default handling
-
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... -
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... -
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... -
11:12 AM Revision 79c60fe7 (git): [DOC] Fix broken link (#18917)
-
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. -
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. -
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. -
09:46 AM Revision ed470686 (git): Diagnose inactive SHSTK with CPU and glibc details
-
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... -
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) -
04:34 AM Revision b61da996 (git): [Bug #22336] Fix use-after-free in `IO::Buffer#get_string`. (#18919)
-
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.
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.
-
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... -
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).
-
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... -
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... -
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... -
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... -
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... -
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
-
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... -
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... -
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).
-
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_... -
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... - 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: ... -
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. -
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.
... -
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?
-
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... -
04:09 PM Revision a5fe554f (git): ZJIT: Wait a configured number of exits before invalidation (#18849)
-
04:07 PM Revision 8fd6154c (git): ZJIT: Dispatch Symbol and Proc without a C call
-
04:07 PM Revision 9f062cf4 (git): ZJIT: Remove the now-unused getblockparamproxy profiling
-
04:07 PM Revision 2fba403d (git): ZJIT: Always inline every block handler case for getblockparamproxy
-
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 ... -
03:33 PM Revision 7525ed0b (git): The fallback to Object for alias in a module is deprecated
- https://bugs.ruby-lang.org/issues/22276
-
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...
- 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. - 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. -
02:17 PM Revision 4552e472 (git): [DOC] Fix a typo
-
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 ... -
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).
-
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
... -
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. -
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 -
12:43 PM Revision 85611dc2 (git): [Bug #22324] APIs with observable side effects are not pure
-
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 -
08:02 AM Revision 7b2c30d6 (git): string.c: makes needles_count unsigned
- Making `RBIMPL_ASSERT_OR_ASSUME(needles_count > 0);` redundant.
-
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... -
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 ... -
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... -
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... - 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.
... -
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...
-
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
... - 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... -
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...
-
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... -
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 - 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 ... - 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. -
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:
... -
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).
-
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 "\... -
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... -
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... -
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... - 02:36 AM Revision 5a8c2ac2 (git): [DOC] Update bundled gems list at 0772e42d0418cc4a138d8dfe7de936
- 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 ... -
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> -
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... -
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... -
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... -
02:20 AM Bug #22283 (Closed): `defined?` does not see global variables assigned in a box
-
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...
- 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 ... -
01:35 AM Bug #22273 (Open): Aliasing doesn't interact well with Module#prepend
- Reopening, since this should stay open until removal occurs.
-
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... -
01:29 AM Revision abac8a5b (git): Update tests and specs for alias method in prepended module deprecation
-
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... -
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. -
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... -
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,... -
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... -
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... -
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... -
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 ...
-
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-...
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 ... -
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.
... -
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... -
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... -
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... -
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... -
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... -
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... -
07:05 PM Revision 0bdfb4c9 (git): ZJIT: Support getivar in multi-Ractor mode
-
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. -
06:36 PM Revision a71b1e37 (git): ZJIT: Boot the test VM lazily in helpers that touch ZJITState
-
06:36 PM Revision 74ee88fb (git): ZJIT: Clear cfp->block_code before exposing a stub frame to the GC
-
06:36 PM Revision 76e92234 (git): ZJIT: Set cfp->sp before exposing a stub frame to the GC
-
05:33 PM Revision 3d70677f (git): string.c: fix off by one assertion
-
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... -
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 ... -
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. -
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... -
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. -
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... -
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" * (... -
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... -
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 ... - 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... - 02:47 PM Revision 685aff92 (git): Update default gems list at cb7e0e62e255ce3622108bcd6934b3 [ci skip]
-
02:46 PM Revision cb7e0e62 (git): [ruby/io-console] bump up to 0.9.4
- https://github.com/ruby/io-console/commit/a44ab18ad9
-
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
- 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()) ... -
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... -
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... -
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... -
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. ...
-
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> -
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... -
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... - 07:00 AM Revision 22fda5cc (git): [DOC] Update bundled gems list at 91810913bd418c066ee77117642275
- 05:32 AM Revision 91810913 (git): Update default gems list at 9099b5f81a66db870ee56c1785913f [ci skip]
-
05:31 AM Revision 9099b5f8 (git): [ruby/resolv] v0.8.0
- https://github.com/ruby/resolv/commit/99464a354c
-
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...
-
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> -
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!
-
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. -
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 ...
-
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... -
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"? -
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... -
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 -
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... -
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 -
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
-
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.
-
04:01 AM Revision 159000ed (git): Skip CI on documentation only changes
-
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... - 03:31 AM Revision 6dabc1cf (git): Update default gems list at 028dcaa3c9513aa61903989b979e41 [ci skip]
-
03:30 AM Revision 028dcaa3 (git): [ruby/net-protocol] v0.4.0
- https://github.com/ruby/net-protocol/commit/c1f66145f7
-
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... - 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
-
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... - 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
-
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... - 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
- 02:33 AM Revision e6ec1555 (git): [DOC] Update bundled gems list at b06e76429cd6a79505bbc647e2d342
- 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)
- ... -
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... -
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.
-
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...
-
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. -
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... -
12:54 AM Revision fead12a3 (git): Use `assert_crash_report` in `test_crash_report_pipe`
- Instead of using `assert_in_out_err` directly.
-
12:54 AM Revision 94b8dbc1 (git): Fix crash report path test on Windows
-
12:54 AM Revision 176b4c14 (git): Fix to use `assert_crash_report` results
-
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 ...
- 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.
-
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 ...
-
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...