RFR: 8339711: ZipFile.Source.initCEN needlessly reads END header [v2]
Eirik Bjørsnøs
eirbjo at openjdk.org
Mon Sep 30 09:27:13 UTC 2024
On Sat, 28 Sep 2024 13:20:52 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:
>> Eirik Bjørsnøs has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision:
>>
>> - Merge branch 'master' into zipfile-endhdr
>> - Merge branch 'master' into zipfile-endhdr
>> - Do not include the END header when reading the CEN section
>
> src/java.base/share/classes/java/util/zip/ZipFile.java line 1184:
>
>> 1182: private static final int[] EMPTY_META_VERSIONS = new int[0];
>> 1183: // CEN size is limited to the maximum array size in the JDK
>> 1184: private static final int MAX_CEN_SIZE = Integer.MAX_VALUE - 2;
>
> Hello Eirik, (at least) a couple of other places in the JDK (like the `jdk.internal.util.ArraysSupport.SOFT_MAX_ARRAY_LENGTH` and `java.io.InputStream.MAX_BUFFER_SIZE`) use `Integer.MAX_VALUE - 8` as the maximum supported array size. To be consistent, we should use that same here. In fact, `jdk.internal.util.ArraysSupport.SOFT_MAX_ARRAY_LENGTH` is a public field in the JDK and we could just reference it here as follows:
>
>
> // CEN size is limited to the maximum array size in the JDK
> private static final int MAX_CEN_SIZE = ArraysSupport.SOFT_MAX_ARRAY_LENGTH;
Thanks, I like that we can delegate this constant value out of `java.util.zip` where indeed it looks somewhat arbitrary.
I also update the tests `EndOfCenValidation` and `CenSizeTooLarge` to use the same constant, adding `@modules` jtreg tags as needed.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20905#discussion_r1780737509
More information about the core-libs-dev
mailing list