diff options
Diffstat (limited to 'src/test/Test.java')
-rw-r--r-- | src/test/Test.java | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/test/Test.java b/src/test/Test.java new file mode 100644 index 0000000..9907406 --- /dev/null +++ b/src/test/Test.java @@ -0,0 +1,55 @@ +import java.util.ArrayList; +import java.util.List; +import javassist.*; + +@SuppressWarnings("unused") +class InvalidStackMapFrame { + + public void bytecodeVerifyError1() { + String[] newLine = new String[10]; + for (int i = 0; i < 5; i++) { + String a = newLine[1]; + newLine[4] = a; + } + } + + public void bytecodeVerifyError() { + // javassist bug : invalid stack map frame + List<Integer> test = new ArrayList<Integer>(); + String[] newLine = new String[10]; + for (Integer idx : test) { + // invalid stackMapFrame + // FRAME FULL [bug_regression_jdk7/javassist/InvalidStackMapFrame java/util/ArrayList java/lang/Object java/util/Iterator T T T I] [] + // java/lang/Object is wrong -> [Ljava/lang/String; is correct + String address = newLine[1]; + int tabPos = -1; + if (tabPos != -1) { + address = address.substring(tabPos + 1); + } + newLine[4] = address; + } + + } +} + +public class Test { + private static final String INVALID_STACK_MAP_FRAME = "InvalidStackMapFrame"; + + public static void main(String[] args) throws Exception { + + // CustomURLClassLoader classLoader = new CustomURLClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader()); + + ClassPool classPool = ClassPool.getDefault(); + // classPool.appendClassPath(new LoaderClassPath(classLoader)); + + final CtClass ctClass = classPool.get(INVALID_STACK_MAP_FRAME); + final CtMethod method = ctClass.getDeclaredMethod("bytecodeVerifyError"); + method.addLocalVariable("test_localVariable", CtClass.intType); + method.insertBefore("{ test_localVariable = 1; }"); + ctClass.debugWriteFile(); + Class<?> cc = ctClass.toClass(); + System.out.println(cc.getName()); + InvalidStackMapFrame obj = (InvalidStackMapFrame)cc.getDeclaredConstructor().newInstance(); + obj.bytecodeVerifyError(); + } +} |