Use Zlib::SYNC_FLUSH so buffer does not grow until finished
With JRuby implementation deflate would always return empty string without Zlib::SYNC_FLUSH. That can cause memory problems when large files are in deflate buffer as whole and red there with finish call at once.
This commit is contained in:
parent
b653d57635
commit
5af76cecb5
|
@ -13,7 +13,7 @@ module Zip
|
||||||
val = data.to_s
|
val = data.to_s
|
||||||
@crc = Zlib.crc32(val, @crc)
|
@crc = Zlib.crc32(val, @crc)
|
||||||
@size += val.bytesize
|
@size += val.bytesize
|
||||||
buffer = @zlib_deflater.deflate(data)
|
buffer = @zlib_deflater.deflate(data, Zlib::SYNC_FLUSH)
|
||||||
if buffer.empty?
|
if buffer.empty?
|
||||||
@output_stream
|
@output_stream
|
||||||
else
|
else
|
||||||
|
@ -22,7 +22,9 @@ module Zip
|
||||||
end
|
end
|
||||||
|
|
||||||
def finish
|
def finish
|
||||||
@output_stream << @encrypter.encrypt(@zlib_deflater.finish) until @zlib_deflater.finished?
|
buffer = @zlib_deflater.finish
|
||||||
|
@output_stream << @encrypter.encrypt(buffer) unless buffer.empty?
|
||||||
|
@zlib_deflater.close
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :size, :crc
|
attr_reader :size, :crc
|
||||||
|
|
Loading…
Reference in New Issue