On Thu, 30 Mar 2023 20:01:57 GMT, Chen Liang <li...@openjdk.org> wrote:

>> Does this provide additional verification over what is already done just by 
>> generating the class?
>> 
>> For instance, IIRC the ASM verifier could catch e.g. stack underflow, but 
>> that seems to be caught already by the new implementation without running 
>> the verifier.
>
> Yes, for instance, the class generation doesn't check operand stack 
> underflow, that you can generate code with invalid pops. The classfile 
> verifier catches this: 
> https://github.com/openjdk/jdk/blob/83cf28f99639d80e62c4031c4c9752460de5f36c/src/java.base/share/classes/jdk/internal/classfile/impl/verifier/VerificationFrame.java#L153

This seems to be caught without running the verifier as well:


Caused by: java.lang.IllegalStateException: Operand stack underflow at bytecode 
offset 79 of method invoke(SegmentAllocator,MemorySegment,MemorySegment)
  ...
        at 
java.base/jdk.internal.classfile.impl.StackMapGenerator.generatorError(StackMapGenerator.java:876)
        at 
java.base/jdk.internal.classfile.impl.StackMapGenerator.generatorError(StackMapGenerator.java:832)
        at 
java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.decStack(StackMapGenerator.java:1024)
        at 
java.base/jdk.internal.classfile.impl.StackMapGenerator.processBlock(StackMapGenerator.java:600)
        at 
java.base/jdk.internal.classfile.impl.StackMapGenerator.processMethod(StackMapGenerator.java:420)
        at 
java.base/jdk.internal.classfile.impl.StackMapGenerator.generate(StackMapGenerator.java:293)
        at 
java.base/jdk.internal.classfile.impl.StackMapGenerator.<init>(StackMapGenerator.java:232)
        at 
java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.writeBody(DirectCodeBuilder.java:333)
        at 
java.base/jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute.writeTo(UnboundAttribute.java:914)
        at 
java.base/jdk.internal.classfile.impl.AttributeHolder.writeTo(AttributeHolder.java:56)
        at 
java.base/jdk.internal.classfile.impl.DirectMethodBuilder.writeTo(DirectMethodBuilder.java:136)
        at 
java.base/jdk.internal.classfile.impl.BufWriterImpl.writeList(BufWriterImpl.java:194)
        at 
java.base/jdk.internal.classfile.impl.DirectClassBuilder.build(DirectClassBuilder.java:176)
        at java.base/jdk.internal.classfile.Classfile.build(Classfile.java:218)
        at java.base/jdk.internal.classfile.Classfile.build(Classfile.java:200)
        at java.base/jdk.internal.classfile.Classfile.build(Classfile.java:186)
        at 
java.base/jdk.internal.foreign.abi.BindingSpecializer.specializeHelper(BindingSpecializer.java:186)
        ...

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13247#discussion_r1153740701

Reply via email to