Fix returned outbuf for Inflater#sysread
This commit is contained in:
parent
cda7127107
commit
00b525d76e
|
@ -8,15 +8,15 @@ module Zip
|
||||||
@has_returned_empty_string = false
|
@has_returned_empty_string = false
|
||||||
end
|
end
|
||||||
|
|
||||||
def sysread(length = nil, buf = '')
|
def sysread(length = nil, outbuf = '')
|
||||||
while length.nil? || (@buffer.bytesize < length)
|
while length.nil? || (@buffer.bytesize < length)
|
||||||
break if input_finished?
|
break if input_finished?
|
||||||
@buffer << produce_input(buf)
|
@buffer << produce_input
|
||||||
end
|
end
|
||||||
|
|
||||||
return value_when_finished if eof?
|
return value_when_finished if eof?
|
||||||
|
|
||||||
@buffer.slice!(0...(length || @buffer.bytesize))
|
outbuf.replace(@buffer.slice!(0...(length || @buffer.bytesize)))
|
||||||
end
|
end
|
||||||
|
|
||||||
def eof
|
def eof
|
||||||
|
@ -27,10 +27,10 @@ module Zip
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def produce_input(buf = '')
|
def produce_input
|
||||||
retried = 0
|
retried = 0
|
||||||
begin
|
begin
|
||||||
@zlib_inflater.inflate(input_stream.read(Decompressor::CHUNK_SIZE, buf))
|
@zlib_inflater.inflate(input_stream.read(Decompressor::CHUNK_SIZE))
|
||||||
rescue Zlib::BufError
|
rescue Zlib::BufError
|
||||||
raise if retried >= 5 # how many times should we retry?
|
raise if retried >= 5 # how many times should we retry?
|
||||||
retried += 1
|
retried += 1
|
||||||
|
|
Loading…
Reference in New Issue