Skip to content

[pull] master from ruby:master - #1369

Merged
pull[bot] merged 24 commits into
turkdevops:masterfrom
ruby:master
Sep 2, 2026
Merged

[pull] master from ruby:master#1369
pull[bot] merged 24 commits into
turkdevops:masterfrom
ruby:master

Conversation

@pull

@pull pull Bot commented Sep 2, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

XrXr and others added 24 commits September 1, 2026 11:35
I tried fixing the test for a bit but it's not clear to me what the test
expects. Skip for now; I've pinged the author.
Fixes a compiler warning:

In file included from ../vm.c:676:
../vm_insnhelper.c: In function ‘rb_zjit_throw’:
../vm_insnhelper.c:1886:1: warning: function might be candidate for attribute ‘noreturn’ [-Wsuggest-attribute=noreturn]
 1886 | rb_zjit_throw(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, rb_num_t throw_state, VALUE throwobj)
      | ^~~~~~~~~~~~~
We need to call more and have more classes for this test to make sense.
No one was actually doing equality comparison on `FrameState`s and it
was only derived because `FrameState` was in `ParseError::StackUnderflow`.
No one was reading the `FrameState` out of `StackUnderflow` either.

Save some binary size.
`s` is the current string pointer (`self`), `t` is the new buffer
pointer initialized with `malloc / realloc`.

Hence this condition is always true.
(ruby/time#76)

The sample code and its result in the Time.rfc2822 documentation appear to be inconsistent.

ruby/time@b602d284aa
- Normalizes legacy Latin-1 bytes in Gem::Specification.normalize_yaml_input.
- Works with both Psych and RubyGems’ internal YAML parser.

ruby/rubygems@76215364df
Fall back to RubyGems' safe YAML parser when Psych cannot accept the
metadata as UTF-8. This preserves bytes from ISO-8859-1, EUC-JP, and
other legacy encodings without guessing their encoding.

ruby/rubygems@503e144810
On GitHub Actions the push tests inherited the real variable, took the
auto-attestation path, and spawned `gem exec sigstore-cli` subprocesses.
Scrubbing it in setup also made the host and engine skip guards decide
nothing, so those tests now set it themselves.

ruby/rubygems@8f4bb82839

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
GitHub Actions documents the variable as "true", so any other value,
including "false", should not trigger the auto-attestation path.

ruby/rubygems@f6b15f8b45

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The whole attested push was wrapped in rescue StandardError. A failure to
read a file given to --attestation printed a warning and published the gem
unattested with exit 0, and a network error after the server may have
accepted the multipart push retried it unattested, letting an on-path
attacker strip attestations by cutting the first connection. Only the
opportunistic auto-signing step falls back now.

attest! also returned just the tempfile path, so GC could unlink the
bundle before it was read, which fell into that same rescue. Each bundle
is now validated as a JSON object before it is sent.

ruby/rubygems@9ce35a5f21

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ne is gone

A git source that pins no branch, tag or ref follows whatever branch the
cached bare clone's HEAD points at. Once the remote renames its default
branch that fetch fails, and `Source::Git#fetch` swallowed the failure as
a network error, so the lockfile stayed pinned to the old revision and
`bundle update` reported success with nothing to explain it.

Ask the remote for its current default branch on that failure, fetch it,
and repoint the cached clone. Anything that goes wrong in there leaves
HEAD alone and lets the caller report the original failure, since the
cache is shared with every other project on the machine using the same
URI, and a half-moved cache would never heal on its own.

Fixes ruby/rubygems#5810.

ruby/rubygems@5831d9cccb

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A gem installed from a local path was copied into the global cache under
its canonical file name, where later remote installs of the same name and
version would reuse it without re-verification, so one local install
could poison every other project on the machine.

Two smaller problems in the same expression go with it. The global cache
branch was evaluated before the one gem fetch relies on, so gem fetch
wrote into the cache instead of the working directory, and an unwritable
cache directory aborted the install rather than falling back the way it
does with the cache disabled. The working directory is compared by
identity because the paths can differ while naming the same place, and
because Dir.pwd raises once that directory is gone.

ruby/rubygems@645fe42ef9

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The file and path schemes wrote into the shared cache directory with a
plain FileUtils.cp, so a concurrent install could read a half-written
.gem file. Route them through Gem::AtomicFileWriter like the http scheme,
which also makes replacing a read-only cache copy work.

cp passed the source mode to File.open, so it reached only a file being
created and the umask still applied to it. Reproduce that rather than
chmodding unconditionally, which would skip the umask, carry setuid
across, and rewrite the mode of a file cp would have left alone.

ruby/rubygems@9507af2bf3

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… the API

The expected cache base was computed from Gem.global_gem_cache_path, the
same expression the code under test uses, so the assertion could never
catch an unintended path change. That method was added after 4.0 was cut,
so no released 4.0.x has it and the old gate would make the specs expect
the RubyGems layout from a Bundler that falls back to its own.

ruby/rubygems@ca3c7c08b7

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
It was deprecated in 4.0 with a 4.1 removal horizon, and its tests were
already dropped with the deprecation. Nothing else in this file uses
`rubygems_deprecate`, so the `Gem::Deprecate` extension goes too.

ruby/rubygems@a0b5cb5e03

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bumps the github-actions group with 2 updates in the / directory: [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) and [taiki-e/install-action](https://github.com/taiki-e/install-action).


Updates `zizmorcore/zizmor-action` from 0.6.2 to 0.6.3
- [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
- [Commits](zizmorcore/zizmor-action@3dc1ecc...70fb788)

Updates `taiki-e/install-action` from 2.87.1 to 2.87.2
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](taiki-e/install-action@742a331...1ed6d7b)

---
updated-dependencies:
- dependency-name: zizmorcore/zizmor-action
  dependency-version: 0.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: taiki-e/install-action
  dependency-version: 2.87.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
When bundle exec resolves an explicit relative path like ./script and falls back to Kernel.exec, Bundler currently prepends another ./ because the resolved path is not absolute. The same issue affects Windows paths such as .\script.

Only prepend ./ for non-absolute paths that do not already begin with an explicit relative path marker. Recognize the platform's alternative path separator without changing the meaning of backslashes on POSIX.

Add integration coverage for the original regression and focused coverage for primary and alternative path separators.

Closes ruby/rubygems#8930

Assisted-By: devx/caa7d694-19ff-42bb-9306-686cb9d69649

ruby/rubygems@d172a35a54
We don't need 64 bits for jit_entry_calls/jit_exception_calls so dropping
them down to 32 bits will allow us to save 8 bytes per iseq.
@pull pull Bot locked and limited conversation to collaborators Sep 2, 2026
@pull pull Bot added the ⤵️ pull label Sep 2, 2026
@pull
pull Bot merged commit 90e8610 into turkdevops:master Sep 2, 2026
1 of 4 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.