I can obfuscate my application with ProGuard 2.1. When
I try ProGuard 3.0.7, I get the following trace:
[wtkpackage] java.lang.ArrayIndexOutOfBoundsException: 2811
[wtkpackage] at
proguard.classfile.editor.CodeAttrInfoEditor.isModified(CodeAttrInfoEditor.java:187)
[wtkpackage] at
proguard.optimize.peephole.LoadStoreRemover.visitVariableInstruction(LoadStoreRemover.java:74)
[wtkpackage] at
proguard.classfile.instruction.MultiInstructionVisitor.visitVariableInstruction(MultiInstructionVisitor.java:102)
[wtkpackage] at
proguard.classfile.instruction.VariableInstruction.accept(VariableInstruction.java:168)
[wtkpackage] at
proguard.classfile.CodeAttrInfo.instructionsAccept(CodeAttrInfo.java:149)
[wtkpackage] at
proguard.classfile.instruction.AllInstructionVisitor.visitCodeAttrInfo(AllInstructionVisitor.java:60)
[wtkpackage] at
proguard.classfile.visitor.MultiAttrInfoVisitor.visitCodeAttrInfo(MultiAttrInfoVisitor.java:117)
[wtkpackage] at
proguard.classfile.CodeAttrInfo.accept(CodeAttrInfo.java:133)
[wtkpackage] at
proguard.classfile.ProgramMethodInfo.attributesAccept(ProgramMethodInfo.java:66)
[wtkpackage] at
proguard.classfile.visitor.AllAttrInfoVisitor.visitProgramMethodInfo(AllAttrInfoVisitor.java:53)
[wtkpackage] at
proguard.classfile.ProgramMethodInfo.accept(ProgramMethodInfo.java:58)
[wtkpackage] at
proguard.classfile.ProgramClassFile.methodsAccept(ProgramClassFile.java:504)
[wtkpackage] at
proguard.classfile.visitor.AllMethodVisitor.visitProgramClassFile(AllMethodVisitor.java:47)
[wtkpackage] at
proguard.classfile.ProgramClassFile.accept(ProgramClassFile.java:401)
[wtkpackage] at
proguard.classfile.ClassPool.classFilesAccept(ClassPool.java:118)
[wtkpackage] at
proguard.ProGuard.optimize(ProGuard.java:550)
[wtkpackage] at proguard.ProGuard.execute(ProGuard.java:90)
[wtkpackage] at proguard.ProGuard.main(ProGuard.java:888)
Logged In: YES
user_id=555208
Thank you for your report. Without your code, I can't be
absolutely sure, but extending the if-test on line 67 in
proguard/optimize/peephole/LoadStoreRemover.java should fix
this bug:
if (variableInstruction.isLoad() &&
variableInstruction.opcode !=
InstructionConstants.OP_RET)
Please let us know if you get the chance to try it out.