macOSは最近までZIP64に非対応だった

プログラミングor技術
macOSの標準のArchiverは最近までZIP64に非対応だったそうです。どうりで4GB以上の大きなファイルの圧縮に失敗するわけだ。 (ソース探しが適当で間違えたこと書いてるかもしれないので話半分に聞いて、必ず検証してくださいネ。)

どのバージョンのmacOSからZIP64対応?

2019年リリースのmacOS10.15のCatalinaから対応のようです。
つまりmacOS10.14 High Sierraまでは非対応みたい。対応遅くない?!Windowsはもっともっともっと前のVistaからZIP64に対応しているそうです。
しっかりとしたソースを探してませんが、LINE WORKS のサポートページに以下のような情報がありました。
OSがWindows 8.1以降またはMac OS Catalina(10.15)以上の環境でDriveを使用している場合:
圧縮ファイルはZIP64フォーマットで保存されます。ZIP64フォーマットのZIPファイルは、フォルダの容量が4GBを超えていても解凍できます。

OSがMac OS 10.14以下またはMac OSでブラウザがSafariの環境でDriveを使用している場合: 圧縮ファイルはZIPフォーマットで保存されますが、ZIPフォーマットのZIPファイルはフォルダの容量が4GBを超えている場合、解凍できません。 4GB以上のフォルダをダウンロードする場合は、ZIP 64フォーマットで保存できるPC環境で行ってください https://help.worksmobile.com/jp/drive/upload-download/cannot-decompress-file-created-when-downloading-folder-larger-than-4gb/
というわけでmacOS10.14以前を使ってる場合、ZIP圧縮によく気をつける必要があります。
ZIPフォーマットには普通に超えられちゃうようなファイルサイズやファイル数の制限があります。圧縮時にはエラー出ず無事に終わるけどzipファイルが実は壊れてる、ってなって困ります。

標準のArchiverじゃなく圧縮アプリでも使っときゃよかったです…。

(日本語では)あんまり周知されてない…?

かなり大きな落とし穴なのにあんまり日本語情報出てこない気がしてます。探し方かも。
(4GB以上だと展開できない〜ってのは目にしますが…圧縮の方が大問題。エラーも何も出ず無事に圧縮が終わったと思ったら、実はファイルが壊れてるのはとても困ります。)
macOSはSierraに至るまで対応せず…とWikipedia英語版にあります。日本語版にはないけど。
Mac OS Sierra’s Archive Utility notably does not support ZIP64, and can create corrupt archives when ZIP64 would be required.[41]

https://en.wikipedia.org/wiki/ZIP_(file_format)#ZIP64
Wikipediaから参照されてるGithubの2018年の書き込みをみると、4GB以上だと扱えないとしっかり動作を追って確かめてくれていますね。
When the Mac Archive Utility needs to write 32-bit values in the metadata, it doesn’t check for overflow and simply writes the lower 32 bits of the value. There are 3 values that get corrupted like this in the case of archiving a file that’s over 4 GB in size: (略) https://github.com/thejoshwolfe/yauzl/issues/69#issuecomment-359188643

コメント