Gzip 1.15 修好一批自問世以來就存在的 bug

Gzip 1.15 修好一批自問世以來就存在的 bug

Gzip 1.15 修好一批自問世以來就存在的 bug

GNU gzip 於 2026 年 9 月 20 日發表 1.15 穩定版。維護者 Jim Meyering 在公告中指出,今次距 1.14 版已有 75 週,期間共有 119 個提交,來自 5 位貢獻者,其中 Paul Eggert 貢獻 88 個提交。[1][2]

由問世以來就存在的老問題

官方 NEWS 列出多項自 gzip 面世以來一直存在的缺陷,今次終於修好,包括:當另一個程序同時重新命名 gzip 目的檔案的祖先目錄時,gzip 可能誤刪錯誤檔案;gzip -d 過去會拒絕 PKZIP 簽章、本地檔頭與資料描述符,而這些其實可以出現在格式正確的串流 zip 檔案之中;處理含有異常字元的檔名時,診斷訊息如今會加上引號;某些畸形輸入曾觸發使用未初始化記憶體,現已修正。[1]

解壓 .lzh 檔案亦有兩項長年問題獲得修正:在解壓 .Z 檔案之後再解壓 .lzh 檔案曾出現緩衝區溢位;解壓 .lzh 檔案時,若內部位元緩衝區未被正確清除,輸出會被損毀;連續解壓兩個 .lzh 檔案時,前一個檔案的解碼表亦曾污染後者的輸出。[1]

另有一項源自 gzip-1.7 的缺陷:gzip --synchronous 在具備 O_PATH 的平台(例如 GNU/Linux)未能同步不可讀的父目錄,而在具備 O_SEARCH 但沒有 O_PATH 的平台(例如 FreeBSD)更完全無法同步任何父目錄。此外,在缺少 mktemp 的舊式或精簡平台上,gzexezdiffznew 建立臨時檔案時曾存在競態情況,現已修正。[1]

行為改變

1.15 版亦調整了幾項行為:gzip 不再堅持使用 C locale,改為依環境變數指定的 locale 運作;此改動與檔名引號相關,並可能影響 -l-v 選項輸出浮點數的格式(診斷訊息仍為英文)。gzip -l 對空檔案在計算無限壓縮比時,現會顯示 -Inf% 而非 0.0%znew-P 選項現已被忽略並發出警告,官方解釋該選項原意只在改善效能,但其實作問題太多,不值得繼續支援。[1]

不再支援的平台

官方同時公布終止支援的平台:FreeBSD 4.11(2005 年)、HP-UX 11.00(1997 年)、Minix 3.1.8(2010 年),以及透過不含 UCRT 的 MinGW 使用 MS-Windows 8.1(2013 年)。原因是這些平台的多位元組函式庫已不合用。[1]

對用家的意義

gzip 是幾乎所有 Unix 系統都內建的壓縮工具,長年未被觸碰的程式路徑一旦修正,值得納入日常更新。今次修正同時觸及安全相關項目(未初始化記憶體、緩衝區溢位),發行版與系統管理員宜按各自節奏把 gzip 升上 1.15;自行編譯的用戶可由 GNU FTP 取得 tar.gz、tar.xz 與 zip 三種壓縮格式的原始碼及 GPG 簽章,公告中亦附有 SHA256 與 SHA3-256 校驗值。[1][2]

參考資料

[1] GNU gzip NEWS(官方變更紀錄)

[2] info-gnu 郵件列表 — gzip-1.15 released(stable)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*