diff --git a/Readme.html b/Readme.html
index 181b844e..7290c099 100644
--- a/Readme.html
+++ b/Readme.html
@@ -283,7 +283,7 @@
Changes
-version 3.21
-- JIRA JASSIST-244, 245, 248, 255, 256, 259.
+
- JIRA JASSIST-244, 245, 248, 250, 255, 256, 259, 262.
diff --git a/src/main/javassist/bytecode/stackmap/TypeData.java b/src/main/javassist/bytecode/stackmap/TypeData.java
index 66199927..b83c9f69 100644
--- a/src/main/javassist/bytecode/stackmap/TypeData.java
+++ b/src/main/javassist/bytecode/stackmap/TypeData.java
@@ -319,11 +319,12 @@ private void fixTypes(ArrayList scc, ClassPool cp) throws NotFoundException {
}
if (isBasicType) {
+ is2WordType = kind.is2WordType();
for (int i = 0; i < size; i++) {
TypeVar cv = (TypeVar)scc.get(i);
cv.lowers.clear();
cv.lowers.add(kind);
- is2WordType = kind.is2WordType();
+ cv.is2WordType = kind.is2WordType();
}
}
else {
diff --git a/src/test/Test.java b/src/test/Test.java
index 1aa7f8e2..441879db 100644
--- a/src/test/Test.java
+++ b/src/test/Test.java
@@ -1,11 +1,50 @@
import javassist.*;
public class Test {
- public static void main(String[] args) throws Exception {
- ClassPool cp = ClassPool.getDefault();
- CtClass cc = cp.get("test5.DefaultMethod");
- CtMethod m = CtNewMethod.make("public int run(){ return test5.DefaultMethodIntf.super.foo(); }", cc);
- cc.addMethod(m);
- cc.writeFile();
+ public static void main(String[] args) {
+ CtClass badClass = ClassPool.getDefault().makeClass("badClass");
+ String src = String.join(System.getProperty("line.separator"),
+ "public void eval () {",
+ " if (true) {",
+ " double t=0;",
+ " } else {",
+ " double t=0;",
+ " }",
+ " for (int i=0; i < 2; i++) {",
+ " int a=0;",
+ " int b=0;",
+ " int c=0;",
+ " int d=0;",
+ " if (true) {",
+ " int e = 0;",
+ " }",
+ " }",
+ "}");
+ System.out.println(src);
+ try {
+ badClass.addMethod(CtMethod.make(src, badClass));
+ badClass.debugWriteFile("./bin");
+ Class clazzz = badClass.toClass();
+ Object obj = clazzz.newInstance(); // <-- falls here
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void eval () {
+ if (true) {
+ double t=0;
+ } else {
+ double t=0;
+ }
+ for (int i=0; i < 2; i++) {
+ int a=0;
+ int b=0;
+ int c=0;
+ int d=0;
+ if (true) {
+ int e = 0;
+ }
+ }
}
}
diff --git a/src/test/javassist/JvstTest5.java b/src/test/javassist/JvstTest5.java
index 33740f7f..1af027fd 100644
--- a/src/test/javassist/JvstTest5.java
+++ b/src/test/javassist/JvstTest5.java
@@ -195,4 +195,29 @@ public void edit(MethodCall c) throws CannotCompileException {
Object obj = make(cc.getName());
assertEquals(21713, invoke(obj, "run"));
}
+
+ public void testBadClass() throws Exception {
+ CtClass badClass = ClassPool.getDefault().makeClass("badClass");
+ String src = String.join(System.getProperty("line.separator"),
+ "public void eval () {",
+ " if (true) {",
+ " double t=0;",
+ " } else {",
+ " double t=0;",
+ " }",
+ " for (int i=0; i < 2; i++) {",
+ " int a=0;",
+ " int b=0;",
+ " int c=0;",
+ " int d=0;",
+ " if (true) {",
+ " int e = 0;",
+ " }",
+ " }",
+ "}");
+ System.out.println(src);
+ badClass.addMethod(CtMethod.make(src, badClass));
+ Class clazzz = badClass.toClass();
+ Object obj = clazzz.newInstance(); // <-- falls here
+ }
}