RFR: 8347712: IllegalStateException on multithreaded ZipFile access with non-UTF8 charset [v2]

Jaikiran Pai jpai at openjdk.org
Wed Mar 12 06:50:09 UTC 2025


On Tue, 11 Mar 2025 15:31:09 GMT, Eirik Bjørsnøs <eirbjo at openjdk.org> wrote:

> This seems mostly used to determine which ZipCoder to pick. Could we fold this into the method, calling it zipCoderForPos and make it just return the ZipCoder, like we had in Source?

I intentionally removed the `zipCoderForPos()` method and instead introduced this static method to avoid the case where the code ends up calling this method and then stores the returned `ZipCoder` (like was being done in `Source`). Instead with this new method, it now allows the call sites to determine if a UTF8 `ZipCoder` is needed or a non-UTF8 one and then decide where to get the non-UTF8 `ZipCoder` from. If the call site is a instance method in `ZipFile`, then it was use the `ZipFile`'s `zipCoder` field and if the call site is within `Source`, when the `Source` is being instantiated then it constructs a non-UTF8 `ZipCoder` afresh. That level of detail is better dealt at the call site instead of a method like `zipCoderForPos()`.

> src/java.base/share/classes/java/util/zip/ZipFile.java line 1744:
> 
>> 1742: 
>> 1743:                 int entryPos = pos + CENHDR;
>> 1744:                 final ZipCoder entryZipCoder;
> 
> If you want to construct this lazily, then I think a comment documenting that purpose would be useful here.

Done.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23986#discussion_r1990711952
PR Review Comment: https://git.openjdk.org/jdk/pull/23986#discussion_r1990713465


More information about the core-libs-dev mailing list