From a19aec9d9fe93877dafef10482377a62d4c20759 Mon Sep 17 00:00:00 2001 From: Away <60818070+Away-pp@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:05:02 +0100 Subject: [PATCH] fix: use correct order in removeUnreachableBlocks (PR #2085) * Fixing wrong order in removeUnreachableBlocks * Removing dead code in TestTernary4 test * Do not clear instructions in detach blocks method --- .../java/jadx/core/dex/visitors/blocks/BlockProcessor.java | 5 +++-- .../java/jadx/core/dex/visitors/blocks/BlockSplitter.java | 1 - jadx-core/src/test/smali/conditions/TestTernary4.smali | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java index add61695e..f00b32e2c 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java @@ -654,13 +654,14 @@ public class BlockProcessor extends AbstractVisitor { return; } - toRemove.forEach(BlockSplitter::detachBlock); - mth.getBasicBlocks().removeAll(toRemove); long notEmptyBlocks = toRemove.stream().filter(block -> !block.getInstructions().isEmpty()).count(); if (notEmptyBlocks != 0) { int insnsCount = toRemove.stream().mapToInt(block -> block.getInstructions().size()).sum(); mth.addWarnComment("Unreachable blocks removed: " + notEmptyBlocks + ", instructions: " + insnsCount); } + + toRemove.forEach(BlockSplitter::detachBlock); + mth.getBasicBlocks().removeAll(toRemove); } private static void clearBlocksState(MethodNode mth) { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockSplitter.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockSplitter.java index d1fc23f4a..6c89a8131 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockSplitter.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockSplitter.java @@ -455,7 +455,6 @@ public class BlockSplitter extends AbstractVisitor { successor.getPredecessors().remove(block); } block.add(AFlag.REMOVE); - block.getInstructions().clear(); block.getPredecessors().clear(); block.getSuccessors().clear(); } diff --git a/jadx-core/src/test/smali/conditions/TestTernary4.smali b/jadx-core/src/test/smali/conditions/TestTernary4.smali index f0f339ccb..3c7fdadbe 100644 --- a/jadx-core/src/test/smali/conditions/TestTernary4.smali +++ b/jadx-core/src/test/smali/conditions/TestTernary4.smali @@ -133,8 +133,6 @@ .catchall {:try_start_14 .. :try_end_50} :catchall_4e throw p1 - - return-void .end method .method private getValueObject(Ljava/lang/String;)Ljava/lang/Object;