https://issues.apache.org/bugzilla/show_bug.cgi?id=48270
Summary: Invalid stack map table tag & bad constant pool index with Java 1.6 bytecode Product: BCEL Version: unspecified Platform: All OS/Version: All Status: NEW Severity: major Priority: P2 Component: Main AssignedTo: bcel-dev@jakarta.apache.org ReportedBy: enrico.gu...@polito.it The following code defines a class, lets BCEL parse and rewrite it without any modification, then it tries to load it into the JVM. ================================================================ import org.apache.bcel.Repository; import org.apache.bcel.classfile.JavaClass; class TestClass { public void foo() { int a = 0; /* FIRST CONDITIONAL BLOCK */ if (a == 1) { a = 0; } /* SECOND CONDITIONAL BLOCK */ if (a == 1) { a = 0; } }; } class MyClassLoader extends ClassLoader { public Class getTestClass() throws ClassNotFoundException { JavaClass jcl; jcl = Repository.lookupClass(TestClass.class); byte[] data = jcl.getBytes(); return defineClass(TestClass.class.getName(), data, 0, data.length); } } public class Main { public static void main(String[] args) { try { MyClassLoader mcl = new MyClassLoader(); mcl.getTestClass(); } catch (Exception e) { e.printStackTrace(); } } } ================================================================ If both conditional blocks are present (i.e. not commented), the following exception appears instead: org.apache.bcel.classfile.ClassFormatException: Invalid Stack map table tag: 6 at org.apache.bcel.classfile.StackMapTableEntry.dump(StackMapTableEntry.java:143) at org.apache.bcel.classfile.StackMapTable.dump(StackMapTable.java:86) at org.apache.bcel.classfile.Code.dump(Code.java:154) at org.apache.bcel.classfile.FieldOrMethod.dump(FieldOrMethod.java:111) at org.apache.bcel.classfile.JavaClass.dump(JavaClass.java:317) at org.apache.bcel.classfile.JavaClass.getBytes(JavaClass.java:268) at MyClassLoader.getTestClass(Main.java:23) at Main.main(Main.java:32) If only the second one is commented, the following exception is thrown: Exception in thread "main" java.lang.ClassFormatError: Attribute name has bad constant pool index 4608 in class file TestClass at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.lang.ClassLoader.defineClass(ClassLoader.java:466) at MyClassLoader.getTestClass(Main.java:24) at Main.main(Main.java:32) If both conditional blocks are commented, or if the code is compiled with Java 1.5 compiler instead of 1.6, everything is OK. This happens with BCEL revision 883394. -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: bcel-dev-unsubscr...@jakarta.apache.org For additional commands, e-mail: bcel-dev-h...@jakarta.apache.org