提交 f3d76c43 编写于 作者: S Skylot

fix: prevent StackOverflowError in MarkFinallyVisitor (#1191)

上级 31d57157
......@@ -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);
......
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 {");
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册