fix: prevent StackOverflowError in MarkFinallyVisitor (#1191)
This commit is contained in:
@@ -398,8 +398,8 @@ public class MarkFinallyVisitor extends AbstractVisitor {
|
||||
InsnsSlice dupSlice, FinallyExtractInfo extractInfo) {
|
||||
InsnsSlice finallySlice = extractInfo.getFinallyInsnsSlice();
|
||||
|
||||
List<BlockNode> finallyCS = finallyBlock.getSuccessors();
|
||||
List<BlockNode> dupCS = dupBlock.getSuccessors();
|
||||
List<BlockNode> finallyCS = finallyBlock.getCleanSuccessors();
|
||||
List<BlockNode> dupCS = dupBlock.getCleanSuccessors();
|
||||
if (finallyCS.size() == dupCS.size()) {
|
||||
for (int i = 0; i < finallyCS.size(); i++) {
|
||||
BlockNode finSBlock = finallyCS.get(i);
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package jadx.tests.integration.trycatch;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import jadx.tests.api.IntegrationTest;
|
||||
|
||||
import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
|
||||
|
||||
public class TestTryCatchFinally11 extends IntegrationTest {
|
||||
|
||||
public static class TestCls {
|
||||
private int count = 0;
|
||||
|
||||
public void test(List<Object> list) {
|
||||
try {
|
||||
call1();
|
||||
} finally {
|
||||
for (Object item : list) {
|
||||
call2(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void call1() {
|
||||
count += 100;
|
||||
}
|
||||
|
||||
private void call2(Object item) {
|
||||
count++;
|
||||
}
|
||||
|
||||
public void check() {
|
||||
TestCls t = new TestCls();
|
||||
t.test(Arrays.asList("1", "2"));
|
||||
assertThat(t.count).isEqualTo(102);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
assertThat(getClassNode(TestCls.class))
|
||||
.code()
|
||||
.containsOne("} finally {");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user