Nest host validation vs NestHost attribute performed by Lookup::defineHiddenClass

Mandy Chung mandy.chung at oracle.com
Tue Oct 1 06:04:32 UTC 2019


Forgot the attachment.

On 9/30/19 10:52 PM, Mandy Chung wrote:
>
>
> On 9/30/19 8:02 PM, John Rose wrote:
>> On Sep 30, 2019, at 4:14 PM, David Holmes <david.holmes at oracle.com> 
>> wrote:
>>> This is conceptually all very nice from the perspective of calling 
>>> getNestHost and getNestMembers. However, this is somewhat irrelevant 
>>> when it comes to actual nestmate access checks. The access check (as 
>>> per JVMS 5.4.4) always involves the statically defined NH as any 
>>> LinkageError has to be reproducible - one you get a LinkageError 
>>> trying a specific action you must continue to get the same 
>>> LinkageError for that action. (The lazy resolution of the NH during 
>>> access checks really doesn't fit well into this as it implies a 
>>> class a not 100% linked when it is required to be!)
>>>
>>> So while we are only interested in allowing access between the 
>>> generated lambda proxy class and the LC, the actual access check 
>>> will still need to validate the NH of the LC and if that fails then 
>>> we can't use our lambda proxy class.
>> Two points here:  I think the lambda class D will *always* have 
>> access to the LC’s dynamic nest, given a proper definition of 
>> “dynamic nest”.
>> If the LC has valid a NH or NMs attribute, then that defines a 
>> multiple-element dynamic nest, and D has access to that nest, which 
>> includes LC.
>>
>> (This is true even if some unrelated elements of the NH’s NMs 
>> attribute are non-validatable.  Related entries would not be part of 
>> the dynamic nest.)
>>
>> Now suppose on the other hand the LC or its supposed nest-host has a 
>> defect in the relevant NH/NMs attributes, and X is the exception 
>> representing this.
>> Then LC degrades to a singleton dynamic nest, and attempted access to 
>> supposed nestmates of LC by D will fail, since LC is in a mono-nest 
>> (dynamically).
>> But even so, D has access to LC.  The two of them are a nest of two 
>> classes, one dynamic, and one a fallback mono-nest.
>>
>> Second, the lambda class D always has access to LC (at least LC, 
>> maybe more), only if we jettison the requirement that LC be a NH.
>
> This is good.
>
> Attached is the picture depicting how LC and lambda proxy class 
> interacts (I shared with David an earlier version to explain this 
> scenario).     It shows an example that LC uses lambda expressions and 
> access private members of LC itself only.  It'd be very surprising if 
> NH of LC is re-resolved and D access to LC fails.
>
> Mandy
>



More information about the valhalla-dev mailing list