RFR: 8343427: Class file load hook crashes on archived classes from multi-release JARs [v4]

David Holmes dholmes at openjdk.org
Mon Nov 25 04:18:21 UTC 2024


On Fri, 22 Nov 2024 17:25:54 GMT, Calvin Cheung <ccheung at openjdk.org> wrote:

>> Currently, when retrieving a ClassFileStream during runtime, we call into the zip library to retrieve the stream based only on a class name. This doesn't work well if the class is in a multi-release jar under a versioned directory such as `META-INF/versions/9/Foo.class`. To address this issue, this change calls the java api `ClassLoader.getResourceAsStream()` to retrieve the stream.
>> 
>> Passed tiers 1 - 4 testing.
>
> Calvin Cheung has updated the pull request incrementally with one additional commit since the last revision:
> 
>   update comments

src/hotspot/share/cds/filemap.cpp line 2718:

> 2716:   // The result should be a [B
> 2717:   assert(obj->is_typeArray(), "just checking");
> 2718:   assert(TypeArrayKlass::cast(obj->klass())->element_type() == T_BYTE, "just checking");

This seems unnecessary. What kind of errors are you trying to detect with this? The method signature indicates it returns a byte-array.

src/hotspot/share/cds/filemap.cpp line 2728:

> 2726:   return new ClassFileStream(buffer,
> 2727:                              len,
> 2728:                              cpe->name());

Suggestion:

  return new ClassFileStream(buffer, len,  cpe->name());

src/java.base/share/classes/java/lang/ClassLoader.java line 1698:

> 1696:         } catch (IOException e) {
> 1697:             return null;
> 1698:         }

Any `IOException` should just be left pending so that it gets reported eventually. Otherwise you are returning null here but asserting in the VM that null is never returned.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22262#discussion_r1855752520
PR Review Comment: https://git.openjdk.org/jdk/pull/22262#discussion_r1855752795
PR Review Comment: https://git.openjdk.org/jdk/pull/22262#discussion_r1855756738


More information about the core-libs-dev mailing list