RFR: 8217920: Lookup.defineClass injects a class that can access private members of any class in its own module [v2]

Mandy Chung mchung at openjdk.org
Thu Jan 26 22:41:21 UTC 2023


On Thu, 26 Jan 2023 21:46:04 GMT, Paul Sandoz <psandoz at openjdk.org> wrote:

>> Mandy Chung has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   review feedback
>
> src/java.base/share/classes/java/lang/Module.java line 607:
> 
>> 605:      * {@link java.lang.invoke.MethodHandles.Lookup Lookup} object that can be used to
>> 606:      * {@link java.lang.invoke.MethodHandles.Lookup#defineClass(byte[]) inject classes}
>> 607:      * in package {@code p}. </p>
> 
> Suggestion:
> 
>      * <p> A package {@code p} opened to module {@code M} means that code in
>      * {@code M} is allowed to do deep reflection on all types in the package.
>      * Further, if {@code M} reads this module it can obtain a
>      * {@link java.lang.invoke.MethodHandles.Lookup Lookup} object that is allowed to
>      * {@link java.lang.invoke.MethodHandles.Lookup#defineClass(byte[]) define classes}
>      * in package {@code p}. </p>
> 
> Trying to reuse existing terms. I am presuming deep reflection implies on all members and setAccessible so there is no need to mention it?
> 
> Also i don't see "inject" used in existing text, so just reuse "define"?

Using "define" is fine too. 

This method links to `AccessibleObject.setAccessible` and `MethodHandles.privateLookupIn`.   It may be adequate and no need to mention more.

> src/java.base/share/classes/java/lang/invoke/MethodHandles.java line 883:
> 
>> 881:      * of {@code T}. Extreme caution should be taken when opening a package
>> 882:      * to another module.  The injected classes have the same full privilege
>> 883:      * access as other members in the target module.
> 
> Suggestion:
> 
>      * <p>
>      * The {@code Lookup} object returned by {@code privateLookupIn} is allowed to
>      * {@linkplain Lookup#defineClass(byte[]) define classes} in the runtime package
>      * of {@code T}. Extreme caution should be taken when opening a package
>      * to another module as such defined classes have the same full privilege
>      * access as other members in the target module.
> 
> 
> You mention "target module" but i don't think i it is defined for the Lookup class JavaDoc. In this case are we referring to module M2?

yes, M2.  Updated.

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

PR: https://git.openjdk.org/jdk/pull/12236


More information about the core-libs-dev mailing list