ruby / zlib

Ruby interface for the zlib compression/decompression library
Other
50 stars 35 forks source link

Zlib.gunzip should not fail with non-ascii-8bit strings #55

Closed sorah closed 1 year ago

sorah commented 1 year ago

zstream_discard_input was encoding and character-aware when given input is user-provided, so this discards len chars instead of len bytes.

Also Zlib.gunzip explains in its rdoc that it is equivalent with the following code, but this doesn't fail for UTF-8 String.

string = %w[1f8b0800c28000000003cb48cdc9c9070086a6103605000000].pack("H*").force_encoding('UTF-8')
sio = StringIO.new(string)
gz = Zlib::GzipReader.new(sio, encoding: Encoding::ASCII_8BIT)
p gz.read #=> "hello"
gz&.close
p Zlib.gunzip(string) #=> Zlib::DataError

Reported and discovered by @eagletmt at https://twitter.com/eagletmt/status/1689692467929694209