Improve safety of IFEQ/IFNE check in OpaquePredicateTransformer

bzip2
Graham 5 years ago
parent c4e08242aa
commit 248cad99e3
  1. 8
      deob/src/main/java/dev/openrs2/deob/transform/OpaquePredicateTransformer.kt

@ -88,14 +88,18 @@ class OpaquePredicateTransformer : Transformer() {
// find and fix opaque predicates
for (match in OPAQUE_PREDICATE_MATCHER.match(method).filter { isOpaquePredicate(method, it) }) {
val branch = match[1] as JumpInsnNode
if (branch.opcode == Opcodes.IFEQ) {
when (branch.opcode) {
Opcodes.IFEQ -> {
// branch is always taken
method.instructions.remove(match[0])
branch.opcode = Opcodes.GOTO
} else { // IFNE
}
Opcodes.IFNE -> {
// branch is never taken
match.forEach(method.instructions::remove)
}
else -> error("Invalid opcode")
}
opaquePredicates++
}

Loading…
Cancel
Save