On Thu, 30 Mar 2023 20:11:30 GMT, Jorn Vernee <jver...@openjdk.org> wrote:
>> 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) > ... > > > (I think ASM will just throw an array index OOB exception when processing a > subsequent frame) Just to clarify: I'm looking for the kind of errors that don't get caught by just generating the class, but are also more informative than the default VerifyError you would get from loading an invalid class. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/13247#discussion_r1153837379