On 30/05/2020 6:03 am, Mandy Chung wrote:


On 5/28/20 9:18 PM, David Holmes wrote:
On 29/05/2020 1:52 pm, Mandy Chung wrote:
On 5/28/20 5:44 PM, David Holmes wrote:

This is to validate the given version.  The runtime will check if preview feature is enabled when such class file is loaded. I will make a comment to make it clear.

Okay but I thought the intent here was to pre-validate the version information so that when these bytes get passed to ASM you don't have to worry about the IAE that will be thrown by ASM if there is actually a problem.

Yes it is.  ASM does not check if preview features are enabled or not neither.  When a class file depending preview features is passed to VM, the VM will throw an exception if preview features are not enabled.

Yes but will that VM exception propagate as-is, or will ASM catch it and turn it into IAE? If the latter then your original problem still exists.


I think you may be confused with the code path.  ASM is used only to extract the class name from the bytes.  Once it verifies the class file version and name in the bytes, the next step is to pass the name and bytes to the VM to create the class where it checks if preview features are used and enabled.  If VM will throw an exception, it just gets propagated to the user (no ASM frame on the stack at that point).  See the new PreviewHiddenClass test.

I see. That wasn't clear to me. I thought ASM was doing something that would trigger the VM checks.

Thanks,
David
-----

Updated webrev:
http://cr.openjdk.java.net/~mchung/jdk15/webrevs/8245432/webrev.02/index.html

This patch has a behavioral change to `Lookup::defineClass` if the bytes is not a class or interface.

Lookup::defineClass does not specify what exception to throw if the given bytes has ACC_MODULE flag set in the access_flags item. The current implementation throws NoClassDefFoundError (which is the behavior specified in JVMS 5.3.5).

I propose Lookup::defineClass to specify and throw IllegalArgumentException if the bytes has ACC_MODULE flag set in its access_flags item to be consistent with Lookup::defineHiddenClass.

CSR: https://bugs.openjdk.java.net/browse/JDK-8246108

Mandy

Reply via email to