Fix returned outbuf for Inflater#sysread

This commit is contained in:
Jan-Joost Spanjers 2020-01-05 15:24:22 +01:00
parent cda7127107
commit 00b525d76e
1 changed files with 5 additions and 5 deletions

View File

@ -8,15 +8,15 @@ module Zip
@has_returned_empty_string = false
end
def sysread(length = nil, buf = '')
def sysread(length = nil, outbuf = '')
while length.nil? || (@buffer.bytesize < length)
break if input_finished?
@buffer << produce_input(buf)
@buffer << produce_input
end
return value_when_finished if eof?
@buffer.slice!(0...(length || @buffer.bytesize))
outbuf.replace(@buffer.slice!(0...(length || @buffer.bytesize)))
end
def eof
@ -27,10 +27,10 @@ module Zip
private
def produce_input(buf = '')
def produce_input
retried = 0
begin
@zlib_inflater.inflate(input_stream.read(Decompressor::CHUNK_SIZE, buf))
@zlib_inflater.inflate(input_stream.read(Decompressor::CHUNK_SIZE))
rescue Zlib::BufError
raise if retried >= 5 # how many times should we retry?
retried += 1