Browse Source

fixes a bug of javassist.bytecode.stackmap, which was reported as Issue #328.

tags/rel_3_28_0_ga
chibash 3 years ago
parent
commit
da043b46bc

BIN
javassist.jar View File


+ 12
- 2
src/main/javassist/bytecode/stackmap/TypeData.java View File

@@ -206,7 +206,12 @@ public abstract class TypeData {
}

@Override
public boolean eq(TypeData d) { return getName().equals(d.getName()); }
public boolean eq(TypeData d) {
if (d.isUninit())
return d.eq(this);
else
return getName().equals(d.getName());
}
}

/* a type variable representing a class type or a basic type.
@@ -853,7 +858,12 @@ public abstract class TypeData {
}

@Override
public boolean eq(TypeData d) { return name.equals(d.getName()); }
public boolean eq(TypeData d) {
if (d.isUninit())
return d.eq(this);
else
return name.equals(d.getName());
}

@Override
public void setType(String typeName, ClassPool cp) throws BadBytecode {}

+ 18
- 0
src/test/javassist/bytecode/StackMapTest.java View File

@@ -12,6 +12,7 @@ import java.lang.reflect.Method;
import javassist.ClassPool;
import javassist.CodeConverter;
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtMethod;
import javassist.CtNewConstructor;
import javassist.CtNewMethod;
@@ -830,4 +831,21 @@ public class StackMapTest extends TestCase {

return null;
}

public static class C7 {
public int value;
public static int value2;
public C7() { this(3); }
public C7(int i) {
value = i;
}
}

public void testIssue328() throws Exception {
CtClass cc = loader.get("javassist.bytecode.StackMapTest$C7");
CtConstructor cons = cc.getDeclaredConstructor(new CtClass[] { CtClass.intType });
cons.insertBefore("if ($1 < 0) { super(); if (value2 > 0) { value2++; } return; }");
cc.writeFile();
Object t1 = make(cc.getName());
}
}

Loading…
Cancel
Save