From 00b525d76e295bab19b69c6f3481d60cfda9ca0f Mon Sep 17 00:00:00 2001 From: Jan-Joost Spanjers Date: Sun, 5 Jan 2020 15:24:22 +0100 Subject: [PATCH] Fix returned outbuf for Inflater#sysread --- lib/zip/inflater.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/zip/inflater.rb b/lib/zip/inflater.rb index 734a848..3904ce2 100644 --- a/lib/zip/inflater.rb +++ b/lib/zip/inflater.rb @@ -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