diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java index de2ac4645..c7208ed6a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java @@ -81,6 +81,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; @@ -235,8 +237,10 @@ public class SWFOutputStream extends OutputStream { * @throws IOException */ public void writeSI16(int value) throws IOException { + if (value > 0x7fff) { - throw new Error("Value is too large for SI16: " + value); + Logger.getLogger(SWFOutputStream.class.getName()).log(Level.WARNING, "Value is too large for SI16: " + value + ", 0 written", new Exception()); + value = 0; } writeUI16(value); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java index 84172694e..5a564f55f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java @@ -697,6 +697,7 @@ public class ActionListReader { ActionJump aJump = new ActionDeobfuscateJump(0); int jumpLength = aJump.getTotalActionLength(); aJump.setAddress(a.getAddress()); + //FIXME! This offset can be larger than SI16 value! aJump.setJumpOffset(actionLengthWithHeader - jumpLength); a = aJump; actionLengthWithHeader = a.getTotalActionLength(); 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 3d560a003..80327b018 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 @@ -192,8 +192,7 @@ public class ActionDeobfuscator extends ActionDeobfuscatorSimple { ActionPush push = new ActionPush(0); push.values.clear(); for (GraphTargetItem graphTargetItem : result.stack) { - DirectValueActionItem dv = (DirectValueActionItem) graphTargetItem; - push.values.add(dv.value); + push.values.add(graphTargetItem.getResult()); } push.setAddress(prevAction.getAddress()); actions.addAction(i++, push); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscatorSimple.java index b6192f7ea..ce41e474d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscatorSimple.java @@ -155,8 +155,7 @@ public class ActionDeobfuscatorSimple implements SWFDecompilerListener { ActionPush push = new ActionPush(0); push.values.clear(); for (GraphTargetItem graphTargetItem : result.stack) { - DirectValueActionItem dv = (DirectValueActionItem) graphTargetItem; - push.values.add(dv.value); + push.values.add(graphTargetItem.getResult()); } push.setAddress(prevAction.getAddress()); actions.addAction(i++, push);