[ruby-core:123729] [Ruby Bug#21671] Rails CI raises `Assertion Failed: rbimpl_rstring_getmem:RB_TYPE_P(str, RUBY_T_STRING): actual type: 26` with "-DENABLE_PATH_CHECK=0 -DRUBY_DEBUG=1" enabled

From: "jhawthorn (John Hawthorn) via ruby-core" <ruby-core@...>
Date: 2025-11-08 00:30:57 UTC
List: ruby-core #123729
Issue #21671 has been updated by jhawthorn (John Hawthorn).


I have a patch in https://github.com/ruby/ruby/pull/15101 that I'll merge shortly.

I believe this was an issue in at least Ruby 3.4 as well, need to test older versions. The root cause is that when certain fstrings were fed to IO#write they would be converted into a shared string (which an fstring must not be, they need to own their memory in case their hash is calculated when GC sweeping). This is probably showing up on head because of a new assertion when the table is rebuilt https://github.com/ruby/ruby/blob/a7c23b9a9f726bec7cbd6f89d157d7dd140420da/concurrent_set.c#L150

----------------------------------------
Bug #21671: Rails CI raises `Assertion Failed: rbimpl_rstring_getmem:RB_TYPE_P(str, RUBY_T_STRING): actual type: 26` with "-DENABLE_PATH_CHECK=0 -DRUBY_DEBUG=1" enabled
https://bugs.ruby-lang.org/issues/21671#change-115115

* Author: yahonda (Yasuo Honda)
* Status: Open
* ruby -v: ruby 3.5.0dev (2025-10-28T15:44:25Z master 7a736545e9) +PRISM [x86_64-linux]
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
Recently Rails CI using "-DENABLE_PATH_CHECK=0 -DRUBY_DEBUG=1" enabled ruby raises `Assertion Failed: rbimpl_rstring_getmem:RB_TYPE_P(str, RUBY_T_STRING): actual type: 26` assertion failures.

https://buildkite.com/rails/rails-nightly/builds/3121#019a5af8-b2a1-4289-a791-3fefc14a2a41/1447-1452

### Steps to reproduce

1. Build Ruby with this configure option
```
./configure --prefix="/home/yahonda/.local/share/mise/installs/ruby/trunk" cppflags="-DENABLE_PATH_CHECK=0 -DRUBY_DEBUG=1" optflags="-O3 -fno-inline" --disable-install-doc
```
2. Clone Rails repository and run Active Job integration tests
```
git clone https://github.com/rails/rails
cd rails/activejob
bundle update --bundler
bundle install
bundle exec rake test:integration
```

### Expected behavior
All of tests should pass.

### Actual behavior
It usually raises `./include/ruby/internal/core/rstring.h:391: Assertion Failed: rbimpl_rstring_getmem:RB_TYPE_P(str, RUBY_T_STRING): actual type: 26`
I have attached the entire output as assertion_failed.log

---Files--------------------------------
assertion_failed.log (495 KB)


-- 
https://bugs.ruby-lang.org/
______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

In This Thread

Prev Next