diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java index 71d48a44a..8c05bef43 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionList.java @@ -342,6 +342,19 @@ public class ActionList extends ArrayList { return -1; } + public Action getContainer(int idx) { + int i = idx - 1; + while (i >= 0) { + if (get(i) instanceof GraphSourceItemContainer) { + return get(i); + } + + i--; + } + + return null; + } + public void saveToFile(String fileName) { File file = new File(fileName); try (FileTextWriter writer = new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(file))) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java index 60685da27..cc35b032e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java @@ -153,8 +153,17 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { ActionConstantPool cPool = getConstantPool(actions); for (int i = 0; i < actions.size(); i++) { + int idx = actions.size() - 1; + Action container = actions.getContainer(i); + if (container != null) { + List lastActions = actions.getContainerLastActions(container); + Action lastAction = lastActions.get(lastActions.size() - 1); + int idx2 = actions.getIndexByAddress(lastAction.getAddress()) - 1; + idx = Math.min(idx, idx2); + } + ExecutionResult result = new ExecutionResult(); - executeActions(actions, i, actions.size() - 1, cPool, result, fakeFunctions); + executeActions(actions, i, idx, cPool, result, fakeFunctions); if (result.idx != -1 && result.resultValue == null) { int newIstructionCount = 1; // jump