RFR [9]: 8177036: Class.checkMemberAccess throws NPE when calling Class methods via JNI
Peter Levart
peter.levart at gmail.com
Mon Mar 20 12:01:58 UTC 2017
On 03/20/2017 12:54 PM, Peter Levart wrote:
>
>
> On 03/20/2017 12:42 PM, Peter Levart wrote:
>> Currently core reflection throws InternalError (because of the check
>> in Reflection::ensureMemberAccess). But jake repo already contains
>> changes that remove this check and NPE is thrown later on in
>> verifyModuleAccess...
>>
>> Regards, Peter
>
> ...it is actually even more erratic. If the invocation of core
> reflection is performed from JNI with no caller on a freshly
> constructed Member object, then the call often always succeeds (unless
> the member is protected instance member accessed from subclass),
> because AccessibleObject cache with no cached entry is mistakenly
> treated as 'null' caller. If the Member object is 1st used from a
> non-null caller, only then InternalError is thrown when such Member is
> later invoked from JNI with no caller.
>
> Regards, Peter
>
Perhaps the best way to rectify those problems in one place would be for
Reflection.getCallerClass() to return a special internal class in its
own package, such as:
jdk.internal.solitary.NoCaller
...when there is no caller. This would work correctly for class loader
checks and would only allow invoking public exported members by core
reflection if invoked with no caller...
What do you think?
Regards, Peter
More information about the core-libs-dev
mailing list