From ab924faa1eda511ad34fc9f6f0c164d2c40c14e3 Mon Sep 17 00:00:00 2001 From: Skylot Date: Mon, 22 Sep 2014 22:48:25 +0400 Subject: [PATCH] core: don't remove empty catch blocks --- .../src/main/java/jadx/core/dex/visitors/ModVisitor.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java index 0c5b4892..e6ed2a8d 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java @@ -229,6 +229,7 @@ public class ModVisitor extends AbstractVisitor { } ExceptionHandler excHandler = handlerAttr.getHandler(); boolean noExitNode = true; // check if handler has exit edge to block not from this handler + boolean reThrow = false; for (BlockNode excBlock : excHandler.getBlocks()) { if (noExitNode) { noExitNode = excHandler.getBlocks().containsAll(excBlock.getCleanSuccessors()); @@ -239,7 +240,7 @@ public class ModVisitor extends AbstractVisitor { if (excHandler.isCatchAll() && size > 0 && insns.get(size - 1).getType() == InsnType.THROW) { - + reThrow = true; InstructionRemover.remove(mth, excBlock, size - 1); // move not removed instructions to 'finally' block @@ -266,7 +267,7 @@ public class ModVisitor extends AbstractVisitor { for (BlockNode excBlock : excHandler.getBlocks()) { totalSize += excBlock.getInstructions().size(); } - if (totalSize == 0 && noExitNode) { + if (totalSize == 0 && noExitNode && reThrow) { handlerAttr.getTryBlock().removeHandler(mth, excHandler); } } -- GitLab