diff options
Diffstat (limited to 'lib/rubygems/package')
-rw-r--r-- | lib/rubygems/package/tar_reader/entry.rb | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/rubygems/package/tar_reader/entry.rb b/lib/rubygems/package/tar_reader/entry.rb index 8634381c18..e7b0cd0602 100644 --- a/lib/rubygems/package/tar_reader/entry.rb +++ b/lib/rubygems/package/tar_reader/entry.rb @@ -130,9 +130,10 @@ class Gem::Package::TarReader::Entry def read(len = nil) check_closed - return nil if @read >= @header.size - len ||= @header.size - @read + + return nil if len > 0 && @read >= @header.size + max_read = [len, @header.size - @read].min ret = @io.read max_read @@ -144,9 +145,10 @@ class Gem::Package::TarReader::Entry def readpartial(maxlen = nil, outbuf = "".b) check_closed - raise EOFError if @read >= @header.size - maxlen ||= @header.size - @read + + raise EOFError if maxlen > 0 && @read >= @header.size + max_read = [maxlen, @header.size - @read].min @io.readpartial(max_read, outbuf) |