diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java index 90bb6896e..44f655e1b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java @@ -188,7 +188,7 @@ public class ActionSetMember extends Action { ((GetMemberActionItem) ((DecrementActionItem) value).object).object = ((GetMemberActionItem) ((DecrementActionItem) value).object).object.getThroughDuplicate(); cleanupTemp(((GetMemberActionItem) ((DecrementActionItem) value).object).object, object, output, stack); if (setter) { - stack.addToOutput(new PreDecrementActionItem(action, lineStartAction, ((IncrementActionItem) value).object.getThroughDuplicate())); + stack.addToOutput(new PreDecrementActionItem(action, lineStartAction, ((DecrementActionItem) value).object.getThroughDuplicate())); } else { stack.addToOutput(new PostDecrementActionItem(action, lineStartAction, ((DecrementActionItem) value).object.getThroughDuplicate())); } @@ -252,8 +252,14 @@ public class ActionSetMember extends Action { } finally { if (setter) { stack.finishBlock(output); - stack.push(output.remove(output.size() - 1)); - stack.moveToStack(output); + // Guard against an empty output: if the try block exited via an + // exception before producing a statement, removing from an empty + // list would throw IndexOutOfBoundsException here and mask the + // original exception. Mirrors the check used in cleanupTemp(). + if (!output.isEmpty()) { + stack.push(output.remove(output.size() - 1)); + stack.moveToStack(output); + } } } }