Review Request: JDK-8173978: Lookup.in should allow teleporting from a lookup class in a named module without dropping all access
Daniel Fuchs
daniel.fuchs at oracle.com
Tue Jul 2 15:03:44 UTC 2019
Hi Mandy,
Don't count me as reviewer; this is only editorial:
In MethodHandles.java:
============
165 * A caller, specified as a {@code Lookup} object, is in
module {@code M1} is
166 * allowed to do deep reflection on module {@code M2} and
package of the target class
167 * if and only if all of the following conditions are {@code
true}:
There are two 'is' in this sentence, which makes it a bit difficult
to parse. Should the first be removed?
* A caller, specified as a {@code Lookup} object, in module {@code M1}
is ...
============
169 * <li>If there is a security manager, its {@code
checkPermission} method is
170 * called to check {@code
ReflectPermission("suppressAccessChecks")} and
171 * that must return normally.
172 * <li>
173 * If there is a security manager, its {@code checkPermission}
method is
174 * called to check {@code
ReflectPermission("suppressAccessChecks")}.
175 * This method must return normally.
Probably one of these two bullets should be removed: they look
the same to me.
=============
585 * A {@code Lookup} with {@link #PUBLIC} mode and a lookup
class in {@code M1}
586 * can access public types in a module {@code M2} when {@code
M2} is readable to
587 * {@code M1} when the type is in a package of {@code M2} that
is exported to at least {@code M1}.
^^^^
I believe there is "and" missing here:
<<... when M2 is readable to M1 *and* when the type ....>>
===========
Is the specdiff report incomplete? I was hoping to see the table
added to the Lookup class level API under
582 * <h1><a id="cross-module-lookup"></a>Cross-module lookups</h1>
but it seems to be missing from the specdiff?
BTW: is <h1> the right header? I thought <h1> was reserved for the
class name. John Gibbon will know more ;-)
best regards,
-- daniel
On 02/07/2019 03:47, Mandy Chung wrote:
>
>
> On 7/1/19 12:51 PM, Mandy Chung wrote:
>> This is an enhancement to |`Lookup::in`| and
>> |`MethodHandles::privateLookupIn`| API
>> for cross module teleporting. A `Lookup` object will record the previous
>> lookup class from which this |Lookup| object was teleported such that
>> the access check will use both the previous lookup class and the current
>> |lookup| context (current lookup class and allowed modes) to determine if
>> a type is accessible to this `Lookup` object or not.
>>
>> In a nutshell, `T` in M2 is accessible to a `Lookup` object on `C`
>> (lookup class in M1) and `PLC` (previous lookup class in M0) if and
>> only if
>> 1. both M0 and M1 can read M2
>> 2. T is in a package that is exported from M2 at least to both M0 and M1
>>
>> Detailed specification is in Lookup class spec and `accessClass` javadoc.
>> The relevant spec about cross-module teleporting is in the Lookup class
>> spec and `Lookup::in` and `MethodHandles::privateLookupIn`.
>>
>> CSR: https://bugs.openjdk.java.net/browse/JDK-8226916
>>
>> webrev:
>> http://cr.openjdk.java.net/~mchung/jdk14/8173978/webrev.00
>>
>> javadoc:
>> http://cr.openjdk.java.net/~mchung/jdk14/8173978/javadoc/java.base/java/lang/invoke/MethodHandles.Lookup.html
>>
>>
>> http://cr.openjdk.java.net/~mchung/jdk14/8173978/javadoc/java.base/java/lang/invoke/MethodHandles.html#privateLookupIn(java.lang.Class,java.lang.invoke.MethodHandles.Lookup)
>>
>>
>> I have yet to generate the spec diff. The tool is currently broken
>> due to javadoc change. I'll try to workaround it and post the
>> spec diff soon.
>
> specdiff:
>
> http://cr.openjdk.java.net/~mchung/jdk14/8173978/specdiff/overview-summary.html
>
>
> Mandy
More information about the core-libs-dev
mailing list