Integrated: 8315130: java.lang.IllegalAccessError when processing classlist to create CDS archive
Timofei Pushkin
tpushkin at openjdk.org
Fri May 16 13:55:02 UTC 2025
On Tue, 25 Mar 2025 11:08:24 GMT, Timofei Pushkin <tpushkin at openjdk.org> wrote:
> If a base class is package-private then its subclasses should have the same package name and defining class loader, otherwise `IllegalAccessError` is thrown when linking a subclass. Currently when dumping a static archive separate `URLClassLoader`s are used for each unregistered classes' source. Thus if two unregistered classes, a package-private base class and a sub class, from the same package reside in different sources `IllegalAccessError` will be thrown when linking the sub class. This can be unexpected because the app could have used a single class loader for both classes and thus not have seen the error — see `DifferentSourcesApp.java` from this patch for an example of such app.
>
> This patch fixes the issue by using a single class loader for all unregistered classes. CDS does not allow classes with the same name making such solution possible.
This pull request has now been integrated.
Changeset: 46a12e78
Author: Timofei Pushkin <tpushkin at openjdk.org>
Committer: Ioi Lam <iklam at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/46a12e781edcbe9da7bd39eb9e101fc680053cef
Stats: 671 lines in 13 files changed: 486 ins; 122 del; 63 mod
8315130: java.lang.IllegalAccessError when processing classlist to create CDS archive
Reviewed-by: iklam, ccheung
-------------
PR: https://git.openjdk.org/jdk/pull/24223
More information about the core-libs-dev
mailing list