#1260, #1438 AS1/2 direct editing on(xxx), onClipEvent(xxx) handlers

This commit is contained in:
Jindra Petřík
2021-02-14 11:26:29 +01:00
parent d4a5e03462
commit 03f033035f
16 changed files with 295 additions and 39 deletions

View File

@@ -57,7 +57,7 @@ public class ActionScript2CompilerTest extends ActionScript2TestBase {
SWF swf = new SWF();
ASMSource asm = new DoActionTag(swf);
ActionScript2Parser par = new ActionScript2Parser(swf);
ActionScript2Parser par = new ActionScript2Parser(swf, asm);
try {
asm.setActions(par.actionsFromString(sourceAsToCompile));
} catch (ActionParseException | CompilationException ex) {

View File

@@ -55,7 +55,7 @@ public class ActionScript2DeobfuscatorTest extends ActionScript2TestBase {
private String recompile(String str) throws ActionParseException, IOException, CompilationException, InterruptedException, TimeoutException {
SWF swf = new SWF();
swf.version = SWF.DEFAULT_VERSION;
ActionScript2Parser par = new ActionScript2Parser(swf);
ActionScript2Parser par = new ActionScript2Parser(swf, new DoActionTag(swf));
HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false);
List<Action> actions = par.actionsFromString(str);
byte[] hex = Action.actionsToBytes(actions, true, SWF.DEFAULT_VERSION);

View File

@@ -16,11 +16,21 @@
*/
package com.jpexs.decompiler.flash;
import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.ActionList;
import com.jpexs.decompiler.flash.action.ConstantPoolTooBigException;
import com.jpexs.decompiler.flash.action.parser.script.ActionScript2Parser;
import com.jpexs.decompiler.flash.action.swf4.ActionPush;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.tags.DoActionTag;
import com.jpexs.decompiler.flash.tags.Tag;
import com.jpexs.decompiler.flash.tags.base.ASMSource;
import com.jpexs.decompiler.graph.CompilationException;
import com.jpexs.helpers.ByteArrayRange;
import java.io.IOException;
import java.util.List;
import static org.testng.Assert.fail;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -41,7 +51,7 @@ public class ActionScript2ParserTest extends ActionScript2TestBase {
try {
SWF swf = new SWF();
swf.version = SWF.DEFAULT_VERSION;
ActionScript2Parser par = new ActionScript2Parser(swf);
ActionScript2Parser par = new ActionScript2Parser(swf, new DoActionTag(swf));
par.actionsFromString(script);
} catch (IOException | CompilationException | ParseException ex) {
fail("Unable to parse: " + script, ex);

View File

@@ -109,9 +109,9 @@ public class DirectEditingTest extends FileTestBase {
HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false);
asm.getActionScriptSource(writer, null);
String as = writer.toString();
as = asm.removePrefixAndSuffix(as);
//as = asm.removePrefixAndSuffix(as);
ActionScript2Parser par = new ActionScript2Parser(swf);
ActionScript2Parser par = new ActionScript2Parser(swf, asm);
try {
asm.setActions(par.actionsFromString(as));
} catch (ActionParseException | CompilationException ex) {
@@ -120,7 +120,7 @@ public class DirectEditingTest extends FileTestBase {
writer = new HighlightedTextWriter(new CodeFormatting(), false);
asm.getActionScriptSource(writer, null);
String as2 = writer.toString();
as2 = asm.removePrefixAndSuffix(as2);
//as2 = asm.removePrefixAndSuffix(as2);
try {
asm.setActions(par.actionsFromString(as2));
} catch (ActionParseException | CompilationException ex) {
@@ -129,7 +129,7 @@ public class DirectEditingTest extends FileTestBase {
writer = new HighlightedTextWriter(new CodeFormatting(), false);
asm.getActionScriptSource(writer, null);
String as3 = writer.toString();
as3 = asm.removePrefixAndSuffix(as3);
//as3 = asm.removePrefixAndSuffix(as3);
if (!as3.equals(as2)) {
fail("ActionScript is different: " + asm.getSwf().getShortFileName() + "/" + asm.toString());
}