一个 tar 包被 8 种工具解出 8 种结果,探测 POSIX 边界

mitsuhiko · x · 2026-11-10

stoppels.ch 发布文章《The hardest tarball?》:构造一个可用单条 GNU tar 命令创建的归档,但不同工具解压会得到最多 8 种不同结果。

构造技巧:重复同名文件让 GNU tar 存成硬链接,再用 transform 改名为 café 触发 pax UTF-8 头,随后用 pax 的 size:=512 记录覆盖硬链接默认 size=0(512 恰好等于一个 tar 头大小),制造「硬链接带数据」的歧义——POSIX 只说 pax 归档中硬链接数据块「可以包含」,语义不明。

实测结果:GNU tar、BusyBox、Python、Go、Perl 这组忽略硬链接上的 size,解出三个文件;而 macOS 系统自带的 bsdtar 更贴近 POSIX 精神,把那 512 字节写进硬链接,导致 file 内容被覆盖。是对各 tar 实现兼容性差异的一次精彩实测。

原文链接 →

「Fun」频道最新

更多「Fun」频道 AI 资讯 →