ZLib Gzip API 检测 EOF?

EOF detection by ZLib Gzip API?

我有一个示例 Gzip Compressed Data | 100-length RNG Pad。令人惊讶的是 zlib GZip file API is able to detect EOF at the start of the n-length pad and not count it in. Try Online

我试着查看 header and source code,这些是我最好的猜测:

  1. 基于源代码 - 检测到由于遇到无效字节序列而导致的流损坏 - 因此 gzread returns -1.
  2. 基于文件头 - 在最后一个 read 期间检测末尾的 CRC32,并检查其后相应的文件大小。如果事情符合它 returns EOF.

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

如果您询问 zlib 是否检测到它正在获取应该是 gzip 流的随机数据,那么是的,它通常会基于违反 header 的情况在少量字节内执行此操作格式或压缩格式。