From 2433a7e89c0f1214c8ca4494b68a07a3c95fa5b5 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 28 Jul 2018 22:09:29 +0300 Subject: [PATCH] core: fix exception handler jumps (#320) --- .../jadx/core/dex/visitors/blocksmaker/BlockProcessor.java | 5 +++-- .../jadx/core/dex/visitors/blocksmaker/BlockSplitter.java | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java index 03e77dc43..ab587e26d 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockProcessor.java @@ -418,8 +418,9 @@ public class BlockProcessor extends AbstractVisitor { boolean change = false; for (Edge edge : edges) { BlockNode target = edge.getTarget(); - if (!target.contains(AFlag.SYNTHETIC)) { - BlockSplitter.insertBlockBetween(mth, edge.getSource(), target); + BlockNode source = edge.getSource(); + if (!target.contains(AFlag.SYNTHETIC) && !source.contains(AFlag.SYNTHETIC)) { + BlockSplitter.insertBlockBetween(mth, source, target); change = true; } } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java index b6be091ab..1007f8c7e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocksmaker/BlockSplitter.java @@ -91,6 +91,7 @@ public class BlockSplitter extends AbstractVisitor { startNew = isSplitByJump(prevInsn, insn) || SEPARATE_INSNS.contains(insn.getType()) || isDoWhile(blocksMap, curBlock, insn) + || insn.contains(AType.EXC_HANDLER) || prevInsn.contains(AFlag.TRY_LEAVE) || prevInsn.getType() == InsnType.MOVE_EXCEPTION; if (startNew) {