On Sun, 12 Feb 2023 17:04:51 GMT, Alan Bateman <al...@openjdk.org> wrote:
>> ZipInputStream.readEnd currently assumes a Zip64 data descriptor if the >> number of compressed or uncompressed bytes read from the inflater is larger >> than the Zip64 magic value. >> >> While the ZIP format mandates that the data descriptor `SHOULD be stored in >> ZIP64 format (as 8 byte values) when a file's size exceeds 0xFFFFFFFF`, it >> also states that `ZIP64 format MAY be used regardless of the size of a >> file`. For such small entries, the above assumption does not hold. >> >> This PR augments ZipInputStream.readEnd to also assume 8-byte sizes if the >> ZipEntry includes a Zip64 extra information field. This brings >> ZipInputStream into alignment with the APPNOTE format spec: >> >> >> When extracting, if the zip64 extended information extra >> field is present for the file the compressed and >> uncompressed sizes will be 8 byte values. >> >> >> While small Zip64 files with 8-byte data descriptors are not commonly found >> in the wild, it is possible to create one using the Info-ZIP command line >> `-fd` flag: >> >> `echo hello | zip -fd > hello.zip` >> >> The PR also adds a test verifying that such a small Zip64 file can be parsed >> by ZipInputStream. > > This proposed change will require a lot of review cycles and a lot of > testing. The current implementation came about because of issues with several > zip tools so we have to be very careful changing it. @AlanBateman I was planning to integrate this myself pending the OpenJDK census update for my JDK Commiter status and the Skara team linking my Github account. But there is no rush here, I'm happy to hold off until you find time to provide feedback. This can wait, please enjoy your holidays! :-) ------------- PR Comment: https://git.openjdk.org/jdk/pull/12524#issuecomment-1867350502