diff options
| author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2024-10-31 17:02:12 +0100 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-11-04 10:04:40 +0000 |
| commit | 50dbe19b685047cff7000878b330eee8a3f2583d (patch) | |
| tree | f36b4986cef888d2bba36c7aa71dd9781942f4b9 /lib | |
| parent | 21af248f920e4f6806b35e40503f8b84f9edd1ec (diff) | |
[rubygems/rubygems] Fix incompatible encodings error
https://github.com/rubygems/rubygems/commit/d478ec403f
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/bundler/rubygems_ext.rb | 14 | ||||
| -rw-r--r-- | lib/rubygems/package/tar_header.rb | 11 | ||||
| -rw-r--r-- | lib/rubygems/package/tar_reader/entry.rb | 6 |
3 files changed, 26 insertions, 5 deletions
diff --git a/lib/bundler/rubygems_ext.rb b/lib/bundler/rubygems_ext.rb index 01c725b031..54c016adcc 100644 --- a/lib/bundler/rubygems_ext.rb +++ b/lib/bundler/rubygems_ext.rb @@ -433,4 +433,18 @@ module Gem end end end + + unless Gem.rubygems_version >= Gem::Version.new("3.5.23") + class Package; end + require "rubygems/package/tar_reader" + require "rubygems/package/tar_reader/entry" + + module FixFullNameEncoding + def full_name + super.force_encoding(Encoding::UTF_8) + end + end + + Package::TarReader::Entry.prepend(FixFullNameEncoding) + end end diff --git a/lib/rubygems/package/tar_header.rb b/lib/rubygems/package/tar_header.rb index dd5e835a1e..0ebcbd789d 100644 --- a/lib/rubygems/package/tar_header.rb +++ b/lib/rubygems/package/tar_header.rb @@ -228,6 +228,17 @@ class Gem::Package::TarHeader @checksum = oct calculate_checksum(header), 6 end + ## + # Header's full name, including prefix + + def full_name + if prefix != "" + File.join prefix, name + else + name + end + end + private def calculate_checksum(header) diff --git a/lib/rubygems/package/tar_reader/entry.rb b/lib/rubygems/package/tar_reader/entry.rb index 5e9d9af5c6..f837e86fd6 100644 --- a/lib/rubygems/package/tar_reader/entry.rb +++ b/lib/rubygems/package/tar_reader/entry.rb @@ -87,11 +87,7 @@ class Gem::Package::TarReader::Entry # Full name of the tar entry def full_name - if @header.prefix != "" - File.join @header.prefix, @header.name - else - @header.name - end + @header.full_name.force_encoding(Encoding::UTF_8) rescue ArgumentError => e raise unless e.message == "string contains null byte" raise Gem::Package::TarInvalidError, |
