mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
[rubygems/rubygems] Ignore non-tar format .gem
files during search
Previously, `rake install` or `rake update` would fail if there was a non-tar format `.gem` file in the current working directory.
f562788f1d
This commit is contained in:
parent
60196b4780
commit
062d6050b0
3 changed files with 25 additions and 2 deletions
|
@ -52,7 +52,14 @@ class Gem::Package::TarReader
|
|||
return enum_for __method__ unless block_given?
|
||||
|
||||
until @io.eof? do
|
||||
header = Gem::Package::TarHeader.from @io
|
||||
begin
|
||||
header = Gem::Package::TarHeader.from @io
|
||||
rescue ArgumentError => e
|
||||
# Specialize only exceptions from Gem::Package::TarHeader.strict_oct
|
||||
raise e unless e.message.match?(/ is not an octal string$/)
|
||||
raise Gem::Package::TarInvalidError, e.message
|
||||
end
|
||||
|
||||
return if header.empty?
|
||||
entry = Gem::Package::TarReader::Entry.new header, @io
|
||||
yield entry
|
||||
|
|
|
@ -40,10 +40,11 @@ class Gem::Source::Local < Gem::Source
|
|||
|
||||
Dir["*.gem"].each do |file|
|
||||
pkg = Gem::Package.new(file)
|
||||
spec = pkg.spec
|
||||
rescue SystemCallError, Gem::Package::FormatError
|
||||
# ignore
|
||||
else
|
||||
tup = pkg.spec.name_tuple
|
||||
tup = spec.name_tuple
|
||||
@specs[tup] = [File.expand_path(file), pkg]
|
||||
|
||||
case type
|
||||
|
|
|
@ -25,6 +25,21 @@ class TestGemPackageTarReader < Gem::Package::TarTestCase
|
|||
io.close!
|
||||
end
|
||||
|
||||
def test_each_with_not_a_tar
|
||||
text = "Hello, world!!?\n" * 256 # 4 KiB
|
||||
io = TempIO.new text
|
||||
|
||||
Gem::Package::TarReader.new io do |tar|
|
||||
assert_raise Gem::Package::TarInvalidError do
|
||||
tar.each do
|
||||
flunk "TarInvalidError was expected to occur, but an entry was found"
|
||||
end
|
||||
end
|
||||
end
|
||||
ensure
|
||||
io.close!
|
||||
end
|
||||
|
||||
def test_rewind
|
||||
content = ("a".."z").to_a.join(" ")
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue