You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Test.java 1.9KB

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