[kaffe] java.lang.IllegalAccessError
Chris Gray
chris at kiffer.eunet.be
Sat Oct 25 09:30:02 PDT 2003
This is an aspect of a known security misfeature of inner classes: some
access controls which are enforced by the compiler cannot be enforced by the
VM with the same granularity, because the VM doesn't really grok the
inner/outer class hierarchy. E.g from
<http://www.lsd-pl.net/documents/javasecurity-1.0.0.pdf>:
<blockquote>In the case where system classes use inner classes, these inner
classes can be accessed from anycode in the same package. This is due to the
fact that Java bytecode has no concept of inner classes,so they are
translated by the compiler into ordinary classes. Besides, inner classes are
allowed toaccess private fields of the outer classes. This is caused by the
fact that they are always translatedinto separate classes. Therefore, in
order to let the inner class access the fields of the correspondingouter
class, the compiler silently changes these fields from private to package
scope.
</blockquote>
Chris
On Saturday 25 October 2003 17:07, Guilhem Lavaux wrote:
> Helmer Krämer wrote:
> >On Fri, 24 Oct 2003 20:14:38 +0200
> >Guilhem Lavaux <guilhem at kaffe.org> wrote:
> >
> >Hi Guilhem, hi Ito,
> >
> >>>The attached programs cause java.lang.IllegalAccessError,
> >>>which partly seemes to have something to do with KJC,
> >>>but class files compiled with Sun's javac also cause the
> >>>error.
> >>
> >>Apparently KJC choses to protect the inner class (as usual). I've not
> >>really seen a specific restriction about access modifiers concerning
> >>inner classes in doc but the JDK's compiler put your sample class in
> >>public access (even though you explicitly specified it protected). The
> >>best guess I can make is to ignore the access modifier for inner classes
> >>in KJC. I'll prepare this for tomorrow.
> >
> >I don't think that this would be the correct fix (altering
> >the access modifiers during compilation doesn't look right
> >to me). For a discussion of a similar problem have a look
> >at the thread starting at this mail:
> >
> >http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=Pine.LNX.4.10.1001
> >0111327040.12800-100000%40green.usr.onet
> >
> >I think the real problem is kaffe's runtime access checking,
> >which is why I'm about to check in the following patch:
>
> Yes, but this doesn't solve the problem concerning JDK. If you
> disassemble the code generated
> from the classes provided by Ito you may notice that the inner class
> doesn't have any protection
> although it is protected. But I've made another test with private and
> apparently it changes something also
> concerning the modifier, so the problem should be more complicated.
>
> Cheers,
> Guilhem.
>
>
>
> _______________________________________________
> kaffe mailing list
> kaffe at kaffe.org
> http://kaffe.org/cgi-bin/mailman/listinfo/kaffe
--
Chris Gray /k/ Embedded Java Solutions
Embedded & Mobile Java, OSGi http://www.kiffer.be/k/
chris.gray at kiffer.be +32 477 599 703
More information about the kaffe
mailing list