web-dev-qa-db-ja.com

Zip64追加情報フィールド

Zipファイルを分析しようとしているときに、少し混乱しているセクションの1つはZip64 Extra Information Fieldです。特定のフィールドがファイルヘッダー(中央ディレクトリまたはローカル)に収まらない場合に生成されることが予想されるため、ヘッダーに0xffffffffを挿入し、実際の値を追加情報フィールドに配置します。
ドキュメントによると ここ 、これは構造に続く追加フィールドの1つとして見つけることができます:

        Value      Size       Description
        -----      ----       -----------
(Zip64) 0x0001     2 bytes    Tag for this "extra" block type
        Size       2 bytes    Size of this "extra" block
        Original 
        Size       8 bytes    Original uncompressed file size
        Compressed
        Size       8 bytes    Size of compressed data
        Relative Header
        Offset     8 bytes    Offset of local header record
        Disk Start
        Number     4 bytes    Number of the disk on which
                              this file starts 

これは、拡張情報エントリのサイズが常に28バイトであることを期待する必要があることを意味します。
しかし、実際のZip64アーカイブを分析したところ、ファイルオフセットが0xffffffffである中央ディレクトリエントリが1つ見つかりました。次のステップは、Extraデータフィールドで0x0001ヘッダーIDを探すことでした(データサイズは28バイトであると予想されます)。
しかし、代わりに00 01 00 08 00 36 d4 6b ab 02 00 00 00(0x0001ヘッダーID、8バイトサイズ、値0x02ab6bd436の1フィールドに変換)を見つけました。これは、ローカルファイルヘッダーオフセットを正しく表します。 Zip64 Extra Information Fieldのドキュメントに他のフィールドが記載されていないのはなぜですか?
Linuxマシンで利用可能な標準のZipユーティリティを使用しています。

1
tangy

あなたはもう答えを必要としないと確信していますが、将来の読者のために。仕様に従って、64個の追加ブロックフィールドは必要な場合にのみ表示されます。

   4.5.3 -Zip64 Extended Information Extra Field (0x0001):

      The following is the layout of the Zip64 extended 
      information "extra" block. If one of the size or
      offset fields in the Local or Central directory
      record is too small to hold the required data,
      a Zip64 extended information record is created.
      The order of the fields in the Zip64 extended 
      information record is fixed, but the fields MUST
      only appear if the corresponding Local or Central
      directory record field is set to 0xFFFF or 0xFFFFFFFF.

      Note: all fields stored in Intel low-byte/high-byte order.

        Value      Size       Description
        -----      ----       -----------
(Zip64) 0x0001     2 bytes    Tag for this "extra" block type
        Size       2 bytes    Size of this "extra" block
        Original 
        Size       8 bytes    Original uncompressed file size
        Compressed
        Size       8 bytes    Size of compressed data
        Relative Header
        Offset     8 bytes    Offset of local header record
        Disk Start
        Number     4 bytes    Number of the disk on which
                              this file starts 

したがって、ローカル/中央ディレクトリレコードで0xFFFFまたは0xFFFFFFFFとマークされているものだけが、64の追加ブロックに表示されます。

あなたが言及した場合、残りのフィールド(非圧縮、圧縮、ディスク)は適切に通知され、ローカル/セントラルから読み取られる必要があります。

1
aONe