From 21e0c62f75a2c73d4700e8925696afd3c858e372 Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Thu, 23 Nov 2023 12:47:24 +0100 Subject: [PATCH] 8320618: NPE: Cannot invoke "java.lang.constant.ClassDesc.isArray()" because "this.sym" is null --- .../classfile/impl/StackMapGenerator.java | 2 +- test/jdk/jdk/classfile/StackMapsTest.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java index 27e68b9ecf9b4..3ae4b25923255 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java @@ -1394,7 +1394,7 @@ Type toArray() { } Type getComponent() { - if (sym.isArray()) { + if (isArray()) { var comp = sym.componentType(); if (comp.isPrimitive()) { return switch (comp.descriptorString().charAt(0)) { diff --git a/test/jdk/jdk/classfile/StackMapsTest.java b/test/jdk/jdk/classfile/StackMapsTest.java index 50b85db5323c5..3950540500144 100644 --- a/test/jdk/jdk/classfile/StackMapsTest.java +++ b/test/jdk/jdk/classfile/StackMapsTest.java @@ -24,7 +24,7 @@ /* * @test * @summary Testing Classfile stack maps generator. - * @bug 8305990 8320222 + * @bug 8305990 8320222 8320618 * @build testdata.* * @run junit StackMapsTest */ @@ -43,7 +43,6 @@ import java.lang.constant.ClassDesc; import java.lang.constant.ConstantDescs; import java.lang.constant.MethodTypeDesc; -import java.util.List; import java.lang.reflect.AccessFlag; /** @@ -237,6 +236,18 @@ void testClassVersions() throws Exception { .verify(null)); } + @Test + void testInvalidAALOADStack() { + Classfile.of().build(ClassDesc.of("Test"), clb + -> clb.withMethodBody("test", ConstantDescs.MTD_void, 0, cob + -> cob.bipush(10) + .anewarray(ConstantDescs.CD_Object) + .lconst_1() //long on stack caused NPE, see 8320618 + .aaload() + .astore(2) + .return_())); + } + private static final FileSystem JRT = FileSystems.getFileSystem(URI.create("jrt:/")); private static void testTransformedStackMaps(String classPath, Classfile.Option... options) throws Exception {