RFR 8079784: Unexpected IllegalAccessError when trying access InnerClasses attribute

David Holmes david.holmes at oracle.com
Wed Oct 10 01:35:44 UTC 2018

Hi Harold,

Looks fine as-is I have one query below ...

One additional nit in jasm file - this purported line of source code is 
not correct:

  60 //         Class<?> clazz = Buggered.Foo.class;

as you aren't using that class.

On 10/10/2018 12:12 AM, Harold David Seigel wrote:
> Hi,
> Please review this fix, proposed by Doug Simon, for JDK-8079784. The fix 
> prevents classes in the InnerClasses attribute from being loaded unless 
> they are actually being accessed.

That in itself seems reasonable. I'm surprised we don't do more sanity 
checking on the classes listed in the inner classes attribute - I would 
have expected at least a "same package" check.

Looking at the code itself:

       if (inner_is_member && ioff != 0 && ooff != 0) {
+       if (cp->klass_name_at_matches(outer, ooff) &&
+           cp->klass_name_at_matches(inner, ioff)) {
           Klass* o = cp->klass_at(ooff, CHECK);
           if (o == outer) {
             Klass* i = cp->klass_at(ioff, CHECK);
             if (i == inner) {
+     }

I'm wondering how it is possible to have the names match and yet 
potentially o!=outer and i!=inner ?

> Also, while looking into this issue, I noticed that method 
> is_same_package_member() is not used.  So, I removed it as part of this 
> webrev.

In 8u it's called by Reflection::is_same_package_member, which in turn 
is unused. That was removed in 9 by the cleanup done in JDK-8140485. :)


> Open Webrev: http://cr.openjdk.java.net/~hseigel/bug_8079784/webrev/
> JBS Bug:  https://bugs.openjdk.java.net/browse/JDK-8079784
> The fix was tested with the test in the webrev and by running Mach5 
> tiers 1 and 2 tests and builds on Linux-x64, Windows, and Mac OS X, 
> running tiers 3-5 tests on Linux-x64, and by running JCK-12 Lang and VM 
> tests on Linux-x64.
> Thanks, Harold

More information about the hotspot-runtime-dev mailing list