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