diff --git a/jode/ChangeLog b/jode/ChangeLog index eda1998..dc3bf72 100644 --- a/jode/ChangeLog +++ b/jode/ChangeLog @@ -1,3 +1,10 @@ +2001-05-08 Jochen Hoenicke + + * jode/jvm/CodeVerifier.java.in (doVerify): Don't check for + uninitialized objects in local or stack slots on backwards jump or + exception blocks. Sun's jdk also doesn't check it, and I never + understood why it is necessary. But see JVM Spec 4.9.4. + 2001-05-02 Jochen Hoenicke * jode/obfuscator/modules/ConstantAnalyzer.java.in (handleOpcode): diff --git a/jode/jode/jvm/CodeVerifier.java.in b/jode/jode/jvm/CodeVerifier.java.in index 66ef2c7..b8fb2f8 100644 --- a/jode/jode/jvm/CodeVerifier.java.in +++ b/jode/jode/jvm/CodeVerifier.java.in @@ -1054,21 +1054,6 @@ public class CodeVerifier implements Opcodes { } if (instr.getSuccs() != null) { for (int i=0; i< instr.getSuccs().length; i++) { - if (instr.getSuccs()[i].getAddr() < instr.getAddr()) { - /* This is a backwards branch */ - for (int j = 0; j < prevInfo.locals.length; j++) { - if (prevInfo.locals[j] - .getTypeSig().charAt(0) == 'N') - throw new VerifyException - ("Uninitialized local in back-branch"); - } - for (int j = 0; j < prevInfo.stackHeight; j++) { - if (prevInfo.stack[j] - .getTypeSig().charAt(0) == 'N') - throw new VerifyException - ("Uninitialized stack in back-branch"); - } - } if (mergeInfo(instr.getSuccs()[i], (VerifyInfo) info.clone())) todoSet.add(instr.getSuccs()[i]); @@ -1077,12 +1062,6 @@ public class CodeVerifier implements Opcodes { for (int i=0; i= 0) { - for (int j = 0; j < prevInfo.locals.length; j++) { - if (prevInfo.locals[j] - .getTypeSig().charAt(0) == 'N') - throw new VerifyException - ("Uninitialized local in try block"); - } VerifyInfo excInfo = (VerifyInfo) prevInfo.clone(); excInfo.stackHeight = 1; if (handlers[i].type != null)