diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/DepthRegionTraversal.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/DepthRegionTraversal.java index 241db1afb13454ca305e8c232b194a0790476877..8d784cecb29502993bb9e3dc2cf42bff404f4f9d 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/DepthRegionTraversal.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/DepthRegionTraversal.java @@ -5,9 +5,12 @@ import jadx.core.dex.nodes.IContainer; import jadx.core.dex.nodes.IRegion; import jadx.core.dex.nodes.MethodNode; import jadx.core.dex.trycatch.ExceptionHandler; +import jadx.core.utils.exceptions.JadxOverflowException; public class DepthRegionTraversal { + private static final int ITERATIVE_LIMIT = 500; + private DepthRegionTraversal() { } @@ -24,8 +27,12 @@ public class DepthRegionTraversal { public static void traverseAllIterative(MethodNode mth, IRegionIterativeVisitor visitor) { boolean repeat; + int k = 0; do { repeat = traverseAllIterativeInternal(mth, visitor); + if (k++ > ITERATIVE_LIMIT) { + throw new JadxOverflowException("Iterative traversal limit reached, method: " + mth); + } } while (repeat); }