通过ZLib Gzip API进行EOF检测?

时间:2019-03-11 22:00:23

标签: c++ gzip zlib

我有一个示例Gzip Compressed Data | 100-length RNG Pad。令人惊讶的是,zlib GZip file API能够在n长度填充的开始处检测到EOF,而无法将其计数。Try Online

我尝试查看headersource code,这些是我的最佳猜测:

  1. 基于源代码-检测到由于遇到无效字节序列而引起的流损坏-因此gzread返回-1。
  2. 基于文件头-在最后一个read末尾检测CRC32,并检查其后的相应文件大小。如果匹配,则返回EOF。

有人可以证实我的理解,即(1)确实在发生。如果是这种情况,我想我尝试的示例案例可能是基于随机字节序列的未定义行为。

1 个答案:

答案 0 :(得分:1)

如果您要询问zlib是否检测到它正在获取应该是gzip流的随机数据,那么可以,它通常会基于对标头格式或deflate格式的违反而在少量字节内执行此操作。