On Thu, 6 Apr 2023 19:22:56 GMT, Mandy Chung <mch...@openjdk.org> wrote:

> This seems a concern if the target method handle should not have access to 
> the class in that module.

MethodHandle access is checked when the MethodHandle is created.  
For `@CallerSensitive` methods, the MethodHandle is additionally bound to the 
lookup class.  
Also see 
[`java.lang.invoke.ConstantBootstraps.invoke`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/invoke/ConstantBootstraps.html#invoke%28java.lang.invoke.MethodHandles.Lookup,java.lang.String,java.lang.Class,java.lang.invoke.MethodHandle,java.lang.Object...%29).
 If calling an arbitrary MethodHandle from a module could be a problem, then 
that is an easier target.

> W.r.t. the no-arg constructor, I would consider another level of defense to 
> make the constructor to take Lookup of itself and throw an IAE if the lookup 
> class is not itself or it does not have ORIGINAL access.

Without that defense you can create a new instance (if you have a reference to 
the hidden class) that does exactly the same thing as the original instance.  
Other than `getClass` on the original object, `StackWalker` comes to mind as a 
way to obtain the class reference.

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

PR Comment: https://git.openjdk.org/jdk/pull/13197#issuecomment-1499523476

Reply via email to