From 5258c8363abb0d60d798ada1881469dc5be27516 Mon Sep 17 00:00:00 2001 From: Skylot Date: Tue, 4 Mar 2014 23:32:52 +0400 Subject: [PATCH] core: fix NPE in loops processing --- .../jadx/core/dex/visitors/regions/RegionMaker.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java index 3a61f035e..a1b099b68 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java @@ -311,10 +311,13 @@ public class RegionMaker { AttributesList outAttrs = out.getAttributes(); if (outAttrs.contains(AttributeFlag.LOOP_START) && outAttrs.get(AttributeType.LOOP) != loop - && stack.peekRegion() instanceof LoopRegion - && RegionUtils.isRegionContainsBlock(stack.peekRegion(), out)) { - // exit to outer loop which already processed - out = null; + && stack.peekRegion() instanceof LoopRegion) { + LoopRegion outerLoop = (LoopRegion) stack.peekRegion(); + if (outerLoop.getBody() == null /* processing not yet finished */ + || RegionUtils.isRegionContainsBlock(outerLoop, out)) { + // exit to outer loop which already processed + out = null; + } } stack.push(loopRegion);