On Thu, 18 Jul 2024 16:23:44 GMT, Adam Sotona <asot...@openjdk.org> wrote:

> `ClassFile.verify()` should always return list of verification errors and 
> never throw an exception, even for corrupted classes.
> `BoundAttribute` initializations of `LocalVariableTable` and 
> `LocalVariableTypeTable` attributes do not expect invalid possible locations 
> and cause `ClassCastException`.
> 
> This patch fixes `BoundAttribute` to throw `IllegalArgumentException` for 
> invalid `LocalVariableTable` and `LocalVariableTypeTable` attributes 
> locations. And makes `VerifierImpl` a bit more resilient to exceptions thrown 
> from the verifier initialization.
> 
> Relevant test is added.
> 
> Please review.
> 
> Thanks,
> Adam

src/java.base/share/classes/jdk/internal/classfile/impl/verifier/VerifierImpl.java
 line 117:

> 115: 
> 116:     public static List<VerifyError> verify(ClassModel classModel, 
> ClassHierarchyResolver classHierarchyResolver, Consumer<String> logger) {
> 117:         String clsName = classModel.thisClass().asInternalName();

This can still throw `ConstantPoolException` if this_class points to a 
non-Class entry. This entry is lazily read by `ClassReader`, so you can create 
a `ClassModel` for such a bad class.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20241#discussion_r1683165097

Reply via email to