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