zlib 解压缩无效距离集

zlib decompression invalid distances set

./minigzip: my_file_name.gz: 无效的距离设置

https://github.com/madler/zlib 下载代码,并使用以下命令对不同版本的 zlib 进行测试:

git reset --hard && git clean -df && git checkout vxxx && ./configure && make && make test && ./minigzip -d my_file_name.gz

原来v1.2.3.4 ~ v1.2.7会报这个“invalid distances set”的错误,v1.2.3.3及以下,v1.2.7.1及以下版本解压文件就好了。

这个问题是从我们的hadoop集群中提取出来的。我们有一个工作来编写 gzip 文件,然后有一个工作来使用它。消费作业中的数千个文件,随机其中一个会抛出此错误。我们正在使用 zlib 原生库 v1.2.7。

但是当对该文件使用gzip(gunzip)commnad工具时,可以正常解压。因此上面的不同版本的 zlib 测试。

这只是损坏的数据还是我应该升级 zlib 版本?

经过 Adler 的确认,zlib v1.2.7.1 的解压器端确实修复了一个错误。

为了重现这个问题,我用最新版本的zlib解压了.gz文件,然后用v1.2.7压缩了解压后的文件,得到了完全相同大小的压缩文件:

~/workdir$ ll
-rw------- 1 xxx xxx 232917709 Mar 15 13:54 my_file_name.gz

~/zlib/$ git reset --hard && git clean -df && git checkout v1.2.11 && ./configure && make && ./minigzip -d ../workdir/my_file_name.gz

~/workdir$ ll
-rw-rw-r-- 1 xxx xxx 705650679 Mar 15 13:59 my_file_name

~/zlib/$ git reset --hard && git clean -df && git checkout v1.2.7 && ./configure && make && ./minigzip ../workdir/my_file_name

~/workdir$ ll
-rw-rw-r-- 1 xxx xxx 232917709 Mar 15 14:02 my_file_name.gz

之后用v1.2.7解压会报同样的错误:

~/zlib/$ ./minigzip -d ../workdir/my_file_name.gz
./minigzip: ../workdir/my_file_name.gz: invalid distances set

也就是说这不是数据损坏。

注意:部分输出已编辑。