-
Bug
-
Resolution: Unresolved
-
P4
-
25
-
In Review
A user of ClassFile API reports the following exception in one of their applications (trimmed stacktrace):
java.io.UncheckedIOException: java.util.zip.ZipException: ZipFile invalid LOC header (bad signature)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$ResourceParsingClassHierarchyResolver.getClassInfo(ClassHierarchyImpl.java:194)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver$1.apply(ClassHierarchyImpl.java:134)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver$1.apply(ClassHierarchyImpl.java:131)
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1229)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver.getClassInfo(ClassHierarchyImpl.java:142)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.resolve(ClassHierarchyImpl.java:74)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.isInterface(ClassHierarchyImpl.java:86)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeReferenceFrom(StackMapGenerator.java:1363)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeFrom(StackMapGenerator.java:1331)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.merge(StackMapGenerator.java:1192)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.checkAssignableTo(StackMapGenerator.java:1140)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.checkJumpTarget(StackMapGenerator.java:283)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.processExceptionHandlerTargets(StackMapGenerator.java:692)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.processBlock(StackMapGenerator.java:681)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.processMethod(StackMapGenerator.java:454)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.generate(StackMapGenerator.java:303)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.<init>(StackMapGenerator.java:246)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.of(StackMapGenerator.java:157)
at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.generateStackMaps(DirectCodeBuilder.java:332)
at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.tryGenerateStackMaps(DirectCodeBuilder.java:340)
at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.writeBody(DirectCodeBuilder.java:375)
at java.base/jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute.writeTo(UnboundAttribute.java:1099)
at java.base/jdk.internal.classfile.impl.Util.writeAttribute(Util.java:230)
at java.base/jdk.internal.classfile.impl.AttributeHolder.writeTo(AttributeHolder.java:71)
at java.base/jdk.internal.classfile.impl.DirectMethodBuilder.writeTo(DirectMethodBuilder.java:146)
at java.base/jdk.internal.classfile.impl.Util.writeList(Util.java:247)
at java.base/jdk.internal.classfile.impl.DirectClassBuilder.build(DirectClassBuilder.java:198)
at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:146)
at java.base/jdk.internal.classfile.impl.ClassFileImpl.transformClass(ClassFileImpl.java:153)
at java.base/java.lang.classfile.ClassFile.transformClass(ClassFile.java:693)
at foo.bar.HelloWorld.doTransform(ClassMigrator.java:219)
java.lang.classfile.ClassHierarchyResolver.getClassInfo(ClassDesc classDesc) is specified to throw only IllegalArgumentException:
* @throws IllegalArgumentException if a class shouldn't be queried for
* hierarchy, such as when it is inaccessible
So it appears that the ResourceParsingClassHierarchyResolver (which is a ClassHierarchyResolver) throws an unspecified UncheckedIOException from this method's implementation.
java.io.UncheckedIOException: java.util.zip.ZipException: ZipFile invalid LOC header (bad signature)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$ResourceParsingClassHierarchyResolver.getClassInfo(ClassHierarchyImpl.java:194)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver$1.apply(ClassHierarchyImpl.java:134)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver$1.apply(ClassHierarchyImpl.java:131)
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1229)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl$CachedClassHierarchyResolver.getClassInfo(ClassHierarchyImpl.java:142)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.resolve(ClassHierarchyImpl.java:74)
at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.isInterface(ClassHierarchyImpl.java:86)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeReferenceFrom(StackMapGenerator.java:1363)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeFrom(StackMapGenerator.java:1331)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.merge(StackMapGenerator.java:1192)
at java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.checkAssignableTo(StackMapGenerator.java:1140)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.checkJumpTarget(StackMapGenerator.java:283)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.processExceptionHandlerTargets(StackMapGenerator.java:692)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.processBlock(StackMapGenerator.java:681)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.processMethod(StackMapGenerator.java:454)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.generate(StackMapGenerator.java:303)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.<init>(StackMapGenerator.java:246)
at java.base/jdk.internal.classfile.impl.StackMapGenerator.of(StackMapGenerator.java:157)
at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.generateStackMaps(DirectCodeBuilder.java:332)
at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.tryGenerateStackMaps(DirectCodeBuilder.java:340)
at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.writeBody(DirectCodeBuilder.java:375)
at java.base/jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute.writeTo(UnboundAttribute.java:1099)
at java.base/jdk.internal.classfile.impl.Util.writeAttribute(Util.java:230)
at java.base/jdk.internal.classfile.impl.AttributeHolder.writeTo(AttributeHolder.java:71)
at java.base/jdk.internal.classfile.impl.DirectMethodBuilder.writeTo(DirectMethodBuilder.java:146)
at java.base/jdk.internal.classfile.impl.Util.writeList(Util.java:247)
at java.base/jdk.internal.classfile.impl.DirectClassBuilder.build(DirectClassBuilder.java:198)
at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:146)
at java.base/jdk.internal.classfile.impl.ClassFileImpl.transformClass(ClassFileImpl.java:153)
at java.base/java.lang.classfile.ClassFile.transformClass(ClassFile.java:693)
at foo.bar.HelloWorld.doTransform(ClassMigrator.java:219)
java.lang.classfile.ClassHierarchyResolver.getClassInfo(ClassDesc classDesc) is specified to throw only IllegalArgumentException:
* @throws IllegalArgumentException if a class shouldn't be queried for
* hierarchy, such as when it is inaccessible
So it appears that the ResourceParsingClassHierarchyResolver (which is a ClassHierarchyResolver) throws an unspecified UncheckedIOException from this method's implementation.
- csr for
-
JDK-8368896 ResourceParsingClassHierarchyResolver.getClassInfo(ClassDesc) throws unspecified UncheckedIOException
-
- Finalized
-
- links to
-
Review(master) openjdk/jdk/27559