Please review this PR which adds validation of the 'total entries' value when 
fetched from the 'ZIP64 End of Central Directory' header.

We should reject this value under the following conditions:

1. It is too large to fit within the specified CEN size (considering each CEN 
header encodes as at least 46 bytes each)
2. It is too large to create the `int[] entries` array safely (max value is 
`ArraysSupport.SOFT_MAX_ARRAY_LENGTH / 3`)

I claim that condition 2 here is already implicitly validated by the current 
maximum CEN size validation. (A CEN encoding such a large number of entries 
would exceed the maximum CEN size a lot and would already be rejected)

This change aims to protect the integrity of the implementation against 
specially crafted ZIP files. No sane ZIP tool will produce such files. 

Testing:

This PR adds a test `EndOfCenValidation.shouldRejectBadTotalEntries` which 
exercises the first condition above.

ZIP tests run locally. GHA results pending.

-------------

Commit messages:
 - No need to check MAX_ENTRIES, since MAX_ENTRIES * 46 would exceed the 
MAX_CEN_SIZE anyhow
 - Test comment should be specific that this requires Zip64
 - Improve ZipFile validation of Zip64 END headers

Changes: https://git.openjdk.org/jdk/pull/21384/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21384&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8341625
  Stats: 140 lines in 2 files changed: 137 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/21384.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21384/head:pull/21384

PR: https://git.openjdk.org/jdk/pull/21384

Reply via email to