96372 Commits

Author SHA1 Message Date
Mike Dalessio
0768f08caf Fix UnboundMethod#== for methods from included/extended modules [Backport #21873]
Method#unbind clones the method entry, preserving its defined_class.
For methods mixed in via include/extend, defined_class is an ICLASS,
causing UnboundMethod#== to return false when comparing against the
same method obtained via Module#instance_method.

Resolve ICLASS defined_class in method_eq.

[Bug #21873]
2026-02-10 10:32:51 -08:00
Hiroshi SHIBATA
e025c839ac Merge RubyGems/Bundler 4.0.6 2026-02-09 17:38:24 -08:00
Hiroshi SHIBATA
87b544b8c4 Merge RubyGems/Bundler 4.0.5 2026-02-09 17:38:24 -08:00
Hiroshi SHIBATA
91a4926c9a Merge RubyGems/Bundler 4.0.4 2026-02-09 17:38:24 -08:00
Takashi Kokubun
d5d3fb8b80 merge revision(s) 8a586af33b59cae93a1bee13c39e87dd087a4a6b: [Backport #21838]
[PATCH] Don't force major GC when there are allocatable slots

	[Bug #21838]

	When we have allocatable slots, we can grow the heap instead of forcing
	a major GC. This prevents major GC to be ran very often in certain situations.
	See the ticket for more details.

	On ruby-bench, we can see that this patch doesn't cause any significant
	regressions:

	    --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------
	    bench           master (ms)  stddev (%)  RSS (MiB)  branch (ms)  stddev (%)  RSS (MiB)  branch 1st itr  master/branch
	    activerecord    148.2        0.3         59.2       150.0        0.8         69.7       1.015           0.988
	    chunky-png      435.2        0.3         72.9       438.8        0.1         66.7       0.993           0.992
	    erubi-rails     733.8        1.2         118.7      704.8        0.2         98.3       1.077           1.041
	    hexapdf         1400.4       1.1         247.0      1405.0       0.9         223.7      0.986           0.997
	    liquid-c        32.5         3.3         32.8       32.5         2.1         30.7       1.042           0.999
	    liquid-compile  31.0         1.7         35.1       33.4         3.9         32.8       0.938           0.928
	    liquid-render   84.7         0.4         30.8       86.3         0.4         30.8       0.981           0.982
	    lobsters        594.7        0.6         310.5      596.6        0.4         306.0      1.057           0.997
	    mail            75.6         2.8         53.3       76.9         0.7         53.2       0.968           0.982
	    psych-load      1122.8       1.2         29.2       1145.1       0.4         31.7       0.964           0.981
	    railsbench      1244.7       0.3         115.5      1254.8       1.1         115.2      0.939           0.992
	    rubocop         103.7        0.5         94.1       104.3        0.5         92.4       0.985           0.994
	    ruby-lsp        88.3         0.6         78.5       88.5         1.2         77.9       0.992           0.997
	    sequel          26.9         0.9         33.6       28.3         1.4         32.1       0.954           0.952
	    shipit          1119.3       1.5         171.4      1075.7       2.1         162.5      1.873           1.040
	    --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------
2026-02-09 15:39:41 -08:00
Takashi Kokubun
306930ae1a merge revision(s) 78b7646bdb91285873ac26bca060591e06c45afe, b4a62a1ca949d93332ad8bce0fcc273581160cc5: [Backport #21842]
[PATCH] [Bug #21842] Let `rb_interned_str` return US-ASCII if possible

	[PATCH] [DOC] Update docs for rb_interned_str and related functions (#15897)

	Related to [Bug #21842].

	* rb_interned_str: document what decides whether the returned string is
	  in US-ASCII or BINARY encoding.
	* rb_interned_str_cstr: include the same description as rb_interned_str
	  for the encoding. This one was still missing the update for US-ASCII
	  and erroneously said the returned string was alwasy in BINARY encoding
	* rb_str_to_interned_str: document how the encoding of the result is
	  defined.

	Co-authored-by: Herwin <herwinw@users.noreply.github.com>
2026-02-09 13:44:42 -08:00
John Hawthorn
c6d9ba58c5 Fix signal crash during keyword argument call
64f508ade8 changed rb_threadptr_raise to call rb_exception_setup,
which uses rb_scan_args with RB_SCAN_ARGS_PASS_CALLED_KEYWORDS.
This checked rb_keyword_given_p(), which read the interrupted
frame's keyword state rather than the signal raise arguments,
causing a crash when a signal arrived during a keyword call.

Revert rb_threadptr_raise to use rb_make_exception directly, and
have thread_raise_m call rb_exception_setup where
rb_keyword_given_p() reflects the correct frame.

[Bug #21865]
2026-02-09 16:38:18 -05:00
Randy Stauner
584c3b6465
[Backport #21866] Fix integer overflow checks in enumerator (#16088)
Fix integer overflow checks in enumerator

Co-authored-by: Jörmungandrk <github@zerodaysec.org>
2026-02-09 09:47:03 -08:00
Earlopain
e4dd078a27 [ruby/syntax_suggest] v2.0.3
https://github.com/ruby/syntax_suggest/commit/a81b92fcf2

[Bug #21847]
2026-01-21 10:11:17 -08:00
Schneems
12203963d2 [ruby/syntax_suggest] Refactor multi-prism version logic
The reason this logic for different methods branches in the class instead of internally was to be eagerly aggressive about runtime performance. This code is currently only used once for the document where it's invoked ~N times (where N is number of lines):

```ruby
module SyntaxSuggest
  class CleanDocument
    # ...
    def join_trailing_slash!
      trailing_groups = @document.select(&:trailing_slash?).map do |code_line|
        take_while_including(code_line.index..) { |x| x.trailing_slash? }
      end
      join_groups(trailing_groups)
      self
    end
```

Since this is not currently a hot-spot I think merging the branches and using a case statement is a reasonable tradeoff and avoids the need to do specific version testing.

An alternative idea was presented in #241 of behavior-based testing for branch logic (which I would prefer), however, calling the code triggered requiring a `DelegateClass` when the `syntax_suggest/api` is being required.

https://github.com/ruby/syntax_suggest/commit/ab122c455f
2026-01-21 10:11:17 -08:00
Earlopain
bbba57f22c [ruby/syntax_suggest] Handle on_sp when using prism
It used to not emit this token type, but now it does.
So when a newer version of prism is present, we can fall back
to the same code that ripper uses.

Ref:
* https://github.com/ruby/ruby/pull/15914
* https://github.com/ruby/prism/pull/3859

https://github.com/ruby/syntax_suggest/commit/42a3b8f6cb
2026-01-21 10:11:17 -08:00
Hiroshi SHIBATA
26777e8a79 Restore irb to warning target
Users should add `irb` to their Gemfile.
`Gem::BUNDLED_GEMS.force_activate 'irb'` is workaround for short term.
2026-01-20 10:49:33 -08:00
Daisuke Aritomo
a3dc71eb5f Suppress bundled gem warning on `binding.irb'
This patch silences the "this won't work in the next version of Ruby"
warning displayed when irb is autoloaded via `binding.irb`.

    main.rb:1: warning: irb used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
    You can add irb to your Gemfile or gemspec to fix this error.
    /.../irb.rb:9: warning: reline used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
    You can add reline to your Gemfile or gemspec to fix this error.

    From: main.rb @ line 1 :

     => 1: binding.irb

    /.../input-method.rb:284: warning: rdoc used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
    You can add rdoc to your Gemfile or gemspec to fix this error.

This warning is incorrect and misleading: users should not need to
include irb (and its dependencies) to their Gemfiles to use
`binding.irb`, even in future versions of Ruby. It is agreed that the
runtime takes care of that.
2026-01-20 10:49:33 -08:00
Hiroshi SHIBATA
310da6cd91 Added example for bundle/inline 2026-01-20 10:49:33 -08:00
Daisuke Aritomo
3046e27852 Add comments 2026-01-20 10:49:33 -08:00
Daisuke Aritomo
20e4a9a807 Fake BUNDLE_GEMFILE and BUNDLE_LOCKFILE to let checks pass
Bundler::Runtime#setup requires a real existing lockfile (see
Bundler::SharedHelpers#default_lockfile).
2026-01-20 10:49:33 -08:00
Daisuke Aritomo
83479483c9 [Bug #21723] Let binding.irb properly load irb by fixing force_activate()
This patch fixes a problem where `binding.irb` (= force_activate('irb'))
fails under `bundle exec` when the Gemfile does not contain `irb` and
does contain a gem which is (1) not installed in GEM_HOME (2) sourced
using `path:`/`git:`.

The original approach constructing a temporary definition fails since
it does not set the equalivent of `path:`/`git:`.

Always reconstructing a definition from a Gemfile and applying lockfile
constraints should be a more robust approach.

[Bug #21723]
2026-01-20 10:49:33 -08:00
Randy Stauner
33cae95c8a
[Backport #21832] Add pushtoarray insn to fix segfault with forwarding + splat (#15870)
Add pushtoarray insn to fix segfault with forwarding + splat

Example insns diff for `def x = [3]; def a(...) = b(*x, 2, 3, ...)`

     == disasm: #<ISeq:a@-e:1 (1,13)-(1,42)>
     local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
     [ 1] "..."@0
     0000 putself                                                          (   1)[Ca]
     0000 putself
     0000 opt_send_without_block                 <calldata!mid:x, argc:0, FCALL|VCALL|ARGS_SIMPLE>
     0000 splatarray                             true
     0000 putobject                              2
     0000 putobject                              3
    +0000 pushtoarray                            2
     0000 getlocal_WC_0                          "..."@0
     0000 sendforward                            <calldata!mid:b, argc:1, ARGS_SPLAT|ARGS_SPLAT_MUT|FCALL|FORWARDING>, nil
     0000 leave                                  [Re]

This matches the insns produced by parse.y
2026-01-14 10:02:51 -08:00
Takashi Kokubun
3176790c0d Add a test backport missed at a10f7fac1fb1dcbdb1ae41137bd7294764a34793
https://bugs.ruby-lang.org/issues/21831
2026-01-13 10:57:31 -08:00
Takashi Kokubun
e04267a14b v4.0.1 v4.0.1 2026-01-12 18:02:40 -08:00
Takashi Kokubun
a10f7fac1f Sync Prism to 1.8.0 2026-01-12 17:59:55 -08:00
Takashi Kokubun
ac596948d4 merge revision(s) 7e81bf5c0c8f43602e6d901f4253dca2f3d71745: [Backport #21812]
[PATCH] Fix sleep spurious wakeup from sigchld (#15802)

	When sleeping with `sleep`, currently the main thread can get woken up from sigchld
	from any thread (subprocess exited). The timer thread wakes up the main thread when this
	happens, as it checks for signals. The main thread then executes the ruby sigchld handler
	if one is registered and is supposed to go back to sleep immediately. This is not ideal but
	it's the way it's worked for a while. In commit 8d8159e7d8 I added writes to `th->status`
	before and after `wait_running_turn` in `thread_sched_to_waiting_until_wakeup`, which is
	called from `sleep`. This is usually the right way to set the thread's status, but `sleep`
	is an exception because the writes to `th->status` are done in `sleep_forever`. There's a
	loop that checks `th->status` in `sleep_forever`. When the main thread got woken up from
	sigchld it saw the changed `th->status` and continued to run the main thread instead of
	going back to sleep.

	The following script shows the error. It was returning instead of sleeping forever.

	```ruby
	t = Thread.new do
	  sleep 0.3
	  `echo hello`  # Spawns subprocess
	  puts "Subprocess exited"
	end

	puts "Main thread sleeping..."
	result = sleep  # Should block forever
	puts "sleep returned: #{result.inspect}"
	```

	Fixes [Bug #21812]
2026-01-12 17:14:52 -08:00
Takashi Kokubun
6273c59a6e merge revision(s) d7a6ff8224519005d2deeb3f4e98689a8a0835ad: [Backport #21819]
[PATCH] [Bug #21819] Data objects without members should also be frozen
2026-01-12 17:13:00 -08:00
Takashi Kokubun
3601b6c2c1 merge revision(s) 9824724b2ffe583302e9318c6eff7a440478125f: [Backport #21815]
[PATCH] Skip test_write_binary(GemSingletonTest) at rbs tests

	```
	Errno::EACCES: Permission denied @ rb_file_s_rename
	...
	D:/a/ruby/ruby/src/lib/rubygems/util/atomic_file_writer.rb:42:in 'File.rename'
	```

	It may caused with atomic_file_writer.rb
2026-01-12 17:11:36 -08:00
Takashi Kokubun
893dcb5f25 merge revision(s) 19e539c9ee1701b34189fa0c1feb942adeb0e326: [Backport #21814]
[PATCH] [Bug #21814] Fix negative bignum modulo

	If modulo is zero, do not  apply bias even if the divisor is zero.
	`BIGNUM_POSITIVE_P` is true even on bignum zero.
2026-01-12 17:05:12 -08:00
Takashi Kokubun
b170f02e0f merge revision(s) 4e0bb58a0a374b40b7691e7b7aa88e759a0fc9f2: [Backport #21811]
[PATCH] fix underflow
2026-01-12 17:02:01 -08:00
Stan Lo
cc4ce48f12 Remove ruby-bench excludes
These benchmarks should be working fine now.
2026-01-12 17:01:27 -08:00
Takashi Kokubun
e52aee688b redmine-backporter.rb: Check remote-tracking branch
on `has_commit` check for the `backport` command.

I don't maintain local "master" branch on my ruby repository for stable
branch maintenance. I want just running `git fetch origin` to make it
work. It should work for those who pull origin/master into their local
master too.
2026-01-12 16:59:42 -08:00
Chris Hasiński
8d764da357 Fix incorrect bundled gems warning for hyphenated gem names
When requiring a file like "benchmark/ips", the warning system would
incorrectly warn about the "benchmark" gem not being a default gem,
even when the user has "benchmark-ips" (a separate third-party gem)
in their Gemfile.

The fix checks if a hyphenated version of the require path exists in
the bundle specs before issuing a warning. For example, requiring
"benchmark/ips" now checks for both "benchmark" and "benchmark-ips"
in the Gemfile.

[Bug #21828]
2026-01-08 09:08:38 -08:00
Takashi Kokubun
be5d24eb03 Add k0kubun as CODEOWNERS 2026-01-05 13:47:53 -08:00
Takashi Kokubun
e7b92abf3a ruby-bench: Prefer --excludes over rm -rf
to remind us of skipped benchmarks in the CI job names
2026-01-05 13:42:15 -08:00
Hiroshi SHIBATA
34aa97ed60 Disabled to run lobsters benchmark because it didn't work with Ruby 4.1 yet 2026-01-05 13:41:58 -08:00
Hiroshi SHIBATA
d555ddcfb3 uutils-coreutils 0.5.0 has been removed uutils wrapper 2026-01-05 13:21:10 -08:00
Satoshi Tagomori
9b2ff68f17 Box: skip checking the current box is the root box
Because checking the current box is not a cheap process.
2026-01-05 13:00:14 -08:00
Satoshi Tagomori
b3371c6ae5 Box: allocate classes as boxable when it happens in the root box
Without this change, classes (including iclass) are allocated
as un-boxable classes after initializing user boxes (after starting
script evaluation). Under this situation, iclasses are created as
un-boxabled class when core modules are included by a class in the
root box, then it causes problems because it's in the root box but
it can't have multiple classexts.

This change makes it possible to allocate boxable classes even after
initializing user boxes. Classes create in the root box will be
boxable, and those can have 2 or more classexts.
2026-01-05 13:00:14 -08:00
Jean Boussier
35c140f92b [DOC] Remove outdated documentation about command injection
[Feature #19630]

This dangerous behavior was removed in 4.0 (996cae65f3cc8fed60c6bb758b00882cac49389d)
but the documentation wasn't updated.
2025-12-26 13:23:56 +01:00
NARUSE, Yui
553f1675f3 v4.0.0 v4.0.0 2025-12-25 12:20:40 +09:00
Nobuyoshi Nakada
d375bcc965
[DOC] Escape capitalized word "data" not to be linked unexpectedly 2025-12-25 11:56:41 +09:00
Nobuyoshi Nakada
b908306f99 [DOC] Reword "Regular Expression" to "Matched Data"
`$~` and its accessors are related to regular expressions, but are not
themselves.
2025-12-25 11:49:32 +09:00
Hiroshi SHIBATA
84edb8456e
Revert "Rollback to minitest-5.27.0"
This reverts commit 8d097bc472fc66221dee23bb8f9e0dddac16db23.
2025-12-25 11:47:08 +09:00
Godfrey Chan
3c4cda10eb
[DOC] Add back Rust 1.85.0 requirement to NEWS.md (#15728)
* [DOC] Add back Rust 1.85.0 requirement to NEWS.md

Addresses k0kubun's review in https://github.com/ruby/ruby/pull/15711#issuecomment-3690541074

NEWS.md serves both CRuby developers as well as end-users. As the
release date closes in, it probably gets seen by more users than
core developers (on the blog for example).

Most users probably don't build Ruby by hand, and instead that is
abstracted through tools like ruby-install or a package manager.
For some users these tools may install pre-built binaries where
they exist, in which case the Rust requirement doesn't apply. In
other instances, the tools merely automate the build, in which case
the correct rustc version is required to enable support.

It is also a little confusing to talk about "enabling support for
the JIT during the build" vs "enabling the JIT at runtime".

This copy attempts to balance all of the above and hopefully gets
the correct points across all intended audiences.

* Apply suggestion from k0kubun

Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>

---------

Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
2025-12-25 09:06:50 +09:00
Max Bernstein
3e82da7232
ZJIT: Don't mark control-flow opcodes as invalidating locals (#15694)
jump, branchif, etc don't invalidate locals in the JIT; they might in the interpreter because they can execute arbitrary code, but the JIT side exits before that happens.
2025-12-24 22:37:25 +00:00
Hiroshi SHIBATA
8d097bc472 Rollback to minitest-5.27.0
Test of 6.0.0 is not working with 4.0.0 stable version.

https://github.com/ruby/actions/actions/runs/20488398805/job/58875672023#step:20:362

```
  rake aborted!
  NoMethodError: undefined method 'cov_filter=' for #<Hoe:0x00007fdb550fc840> (NoMethodError)

    self.cov_filter = %w[ tmp ]
        ^^^^^^^^^^^^^
  /home/runner/work/actions/actions/ruby-4.0.0/gems/src/minitest/Rakefile:20:in 'block in <top (required)>'
  /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/hoe-3.20.0/lib/hoe.rb:394:in 'BasicObject#instance_eval'
  /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/hoe-3.20.0/lib/hoe.rb:394:in 'Hoe.spec'
  /home/runner/work/actions/actions/ruby-4.0.0/gems/src/minitest/Rakefile:11:in '<top (required)>'
  /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/rake-13.3.1/exe/rake:27:in '<top (required)>'
  (See full trace by running task with --trace)
```
2025-12-25 06:52:46 +09:00
Hiroshi SHIBATA
26a1a522b7
Revert "Rollback to test-unit 3.7.3"
This reverts commit c17307ac22f37f74786a4f016121c6ee8cc38915.
2025-12-25 05:47:34 +09:00
Soutaro Matsumoto
8caea03213 rbs_skip_tests_windows 2025-12-25 05:46:44 +09:00
Soutaro Matsumoto
b92bc96541 Skip test to avoid NoMemoryError 2025-12-25 05:46:44 +09:00
Soutaro Matsumoto
d0193e9240 Bundle test-unit 3.7.5 2025-12-25 05:46:44 +09:00
Stan Lo
96d876534e Bump RDoc to 7.0.3 2025-12-25 05:45:16 +09:00
NARUSE, Yui
479f8682c8 Remove extra help 2025-12-24 23:52:45 +09:00
NARUSE, Yui
29ffc5d624 Reapply "Extract ruby_api_version_name"
This reverts commit ba2f6972193cdbd7c1e77e26212513e47926b115.

Box already used ruby_api_version_name.
2025-12-24 23:07:35 +09:00