From d71f3e09dfb8dbd47e39c21bb8368f0e049be9e3 Mon Sep 17 00:00:00 2001 From: Skylot Date: Tue, 1 Feb 2022 14:32:44 +0000 Subject: [PATCH] fix: prevent endless loop in path cross search (#1360) --- jadx-core/src/main/java/jadx/core/utils/BlockUtils.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jadx-core/src/main/java/jadx/core/utils/BlockUtils.java b/jadx-core/src/main/java/jadx/core/utils/BlockUtils.java index 4091ad2b2..1715c11a6 100644 --- a/jadx-core/src/main/java/jadx/core/utils/BlockUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/BlockUtils.java @@ -709,6 +709,7 @@ public class BlockUtils { return oneBlock; } BitSet combinedDF = newBlocksBitSet(mth); + int k = mth.getBasicBlocks().size(); while (true) { // collect dom frontier blocks from current set until only one block left forEachBlockFromBitSet(mth, domFrontBS, block -> { @@ -726,6 +727,10 @@ public class BlockUtils { if (cardinality == 0) { return null; } + if (k-- < 0) { + mth.addWarnComment("Path cross not found for " + blocks + ", limit reached: " + mth.getBasicBlocks().size()); + return null; + } // replace domFrontBS with combinedDF domFrontBS.clear(); domFrontBS.or(combinedDF);