On Wed, 12 Jun 2024 14:02:58 GMT, fitzsim <d...@openjdk.org> wrote: > 8334048: -Xbootclasspath can not read some ZIP64 zip files
It turns out ZIP64 is underrepresented in the test suite in general; for example, https://bugs.openjdk.org/browse/JDK-8185896 is still open. Using the Java class library alone, I have not been able to produce a ZIP file that demonstrates this issue. I have ideas about how the standard ZIP classes could be modified to produce small ZIP64 files suitable for testing various code paths. I was able to produce a small ZIP file using the Info-ZIP command line tool that does demonstrate the issue. To keep the test setup simple, I inlined the ZIP file as byte constants in `BootClassPathZip64Creator`, the driver for `BootClassPathZip64Test`. Next I am going to check the code coverage provided by this test case for the proposed `zip_util.c` fix. I saw and looked into this failure: `2024-07-03T09:37:42.6540920Z at ZipSourceCache.testKeySourceMapping(ZipSourceCache.java:102)` ... `Suppressed: java.nio.file.FileSystemException: 1719999454994-bug8317678.zip: The process cannot access the file because it is being used by another process` but I could not see how `zip_util.c` could cause that. I re-ran [windows-x64 / test (jdk/tier1 part 2)](https://github.com/fitzsim/jdk/actions/runs/9774287212/job/26997159267) and that issue resolved itself. I am not sure at this point if this could be caused by the `zip_util.c` changes, or if it is a transient `windows-x64` builder issue. I was able to get the same _"invalid CEN header (bad signature)"_ error for `-Xbootclasspath` with a ZIP file generated using the `ZipFileSystem` API, using `Map<String, Object> env = Map.of("create", "true", "forceZIP64End", "true");` like `readZip64EndZipFs` does in `test/jdk/java/util/zip/ZipFile/ReadZip.java` (https://github.com/openjdk/jdk/blob/master/test/jdk/java/util/zip/ZipFile/ReadZip.java#L230). Given it is the same failure mode, I am inclined not to add a Java part to the test case. I noticed that `readZip64EndInfoZIPStreaming` in that same test case uses the approach I found independently for creating a small ZIP64 file, and it also inlines the bytes of that small ZIP file. Therefore the inlining approach in `BootClassPathZip64Creator` does not regress [JDK-8321616](https://bugs.openjdk.org/browse/JDK-8321616). I still would like to exercise at least one branch of the heuristics conditional with another test case, so I will work on that next. At that point, I suspect one could argue that [JDK-8185896](https://bugs.openjdk.org/browse/JDK-8185896) is addressed, unless one would prefer to create another set of expensive tests using large-payload ZIP64 files. This patch set is ready for review. I was able to eliminate the Info-ZIP dependency and shrink the test logic significantly. I added two new test cases, one for non-ZIP64 ZIP files, and one for a ZIP64 file with magic values in CEN, both of which worked before and continue to work with the fix proposed in this pull request. ------------- PR Comment: https://git.openjdk.org/jdk/pull/19678#issuecomment-2204456736 PR Comment: https://git.openjdk.org/jdk/pull/19678#issuecomment-2206421991 PR Comment: https://git.openjdk.org/jdk/pull/19678#issuecomment-2229497634 PR Comment: https://git.openjdk.org/jdk/pull/19678#issuecomment-2261474735