xref: /aosp_15_r20/external/javassist/src/test/Test.java (revision f1fbf3c2ab775ce834e0af96b7a85bdc7a0eac65)
1 import java.util.ArrayList;
2 import java.util.List;
3 import javassist.*;
4 
5 @SuppressWarnings("unused")
6 class InvalidStackMapFrame {
7 
bytecodeVerifyError1()8 	public void bytecodeVerifyError1() {
9         String[] newLine = new String[10];
10         for (int i = 0; i < 5; i++) {
11         	String a = newLine[1];
12         	newLine[4] = a;
13         }
14 	}
15 
bytecodeVerifyError()16 	public void bytecodeVerifyError() {
17         // javassist bug : invalid stack map frame
18         List<Integer> test = new ArrayList<Integer>();
19         String[] newLine = new String[10];
20         for (Integer idx : test) {
21             // invalid stackMapFrame
22             // FRAME FULL [bug_regression_jdk7/javassist/InvalidStackMapFrame java/util/ArrayList java/lang/Object java/util/Iterator T T T I] []
23             // java/lang/Object is wrong ->  [Ljava/lang/String; is correct
24             String address = newLine[1];
25             int tabPos = -1;
26             if (tabPos != -1) {
27                 address = address.substring(tabPos + 1);
28             }
29             newLine[4] = address;
30         }
31 
32     }
33 }
34 
35 public class Test {
36     private static final String INVALID_STACK_MAP_FRAME = "InvalidStackMapFrame";
37 
main(String[] args)38     public static void main(String[] args) throws Exception {
39 
40         // CustomURLClassLoader classLoader = new CustomURLClassLoader(new URL[]{}, Thread.currentThread().getContextClassLoader());
41 
42         ClassPool classPool = ClassPool.getDefault();
43         // classPool.appendClassPath(new LoaderClassPath(classLoader));
44 
45         final CtClass ctClass = classPool.get(INVALID_STACK_MAP_FRAME);
46         final CtMethod method = ctClass.getDeclaredMethod("bytecodeVerifyError");
47         method.addLocalVariable("test_localVariable", CtClass.intType);
48         method.insertBefore("{ test_localVariable = 1; }");
49         ctClass.debugWriteFile();
50         Class<?> cc = ctClass.toClass();
51         System.out.println(cc.getName());
52         InvalidStackMapFrame obj = (InvalidStackMapFrame)cc.getDeclaredConstructor().newInstance();
53         obj.bytecodeVerifyError();
54     }
55 }
56