(Deflate)是否对霍夫曼压缩 Deflate 块中允许的长度为 258 的距离对使用代码 284?

问题描述 投票:0回答:1

我一直在开发一个程序,旨在通过尝试可能更有效的方式来表示压缩数据来优化放气压缩文件,并且我最近发现了一个文件,它使用一种不常见的方式来表示距离对长度为 258。根据 RFC 1951,代码 284 用于长度为 227-257 的距离对,代码 285 用于长度为 258 的距离对。但是,代码 284 的编码方式允许它理论上表示距离对该文件使用的长度为 258。这是允许的/普遍支持的吗?它的规范合法吗?

我检查了 Zlib 看看是否有关于此的注释,并且我在 trees.c 中发现了一条注释,其中指出这是一种可能的编码,指出

Note that the length 255 (match length 258) can be represented in two different ways: code 284 + 5 bits or code 285...
,并且 puff.c 似乎也暗示这应该是合法的,表示
Note that 258 can also be coded as the base value 227 plus the maximum extra value of 31. While a good deflate should never do this, it is not an error, and should be decoded properly
。我不确定这些评论是否意味着这应该是规范合法的,或者在 Zlib 之外得到良好支持。

compression zlib deflate
1个回答
0
投票

我想严格阅读PKWare AppnoteRFC 1951(其中包含该代码的行

284   5  227-257
)可以解释为不允许使用代码284来表示长度258。然而,我的解压代码始终允许这样做,因为规范并未明确禁止它。

无论如何,一个有自尊心的放气压缩机绝对不应该产生它。

© www.soinside.com 2019 - 2024. All rights reserved.