From 4dbb74cc451636804b5814f6ce85ecde6b8b244f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 18 Dec 2022 23:06:39 +0100 Subject: [PATCH] Fixed - AS3 - "native" modifier only for methods with EXPLICIT flag - AS3 - AS3 builtin namespace visibility Changed - AS3 - order of modifiers: final, override, access, static, native --- CHANGELOG.md | 3 +++ .../src/com/jpexs/decompiler/flash/abc/ABC.java | 4 ++-- .../jpexs/decompiler/flash/abc/types/Multiname.java | 4 ++-- .../decompiler/flash/abc/types/traits/Trait.java | 12 ++++++------ .../abc/types/traits/TraitMethodGetterSetter.java | 7 ++++--- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d99e1c46..0842e4ff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,10 +54,13 @@ All notable changes to this project will be documented in this file. - Loaded SWFs using "Open loaded during play" feature have short filenames - [#1796] Exception on closing multiple SWFs - AS3 Deobfuscation causing invalid jump offsets for files with constant indices out of bounds +- AS3 - "native" modifier only for methods with EXPLICIT flag +- AS3 - AS3 builtin namespace visibility ### Changed - Quick search needs minimum of 3 characters - AS1/2 deobfuscation - removing obfuscated declarations is now optional (default: off) +- AS3 - order of modifiers: final, override, access, static, native ## [17.0.4] - 2022-12-02 ### Fixed diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java index 51f1ec99f..5faf5c87b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java @@ -2132,8 +2132,8 @@ public class ABC implements Openable { return null; } String name = constants.getString(ns.name_index); - if (name.equals("http://adobe.com/AS3/2006/builtin")) { - return null; + if (name.equals("http://adobe.com/AS3/2006/builtin")) { //TODO: This should really be resolved using ABC indexing, not hardcoded constant + return DottedChain.parseNoSuffix("AS3"); } for (ABCContainerTag abcTag : getAbcTags()) { DottedChain dc = abcTag.getABC().nsValueToName(name); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java index 48c6713b1..61b24ccf7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java @@ -367,8 +367,8 @@ public class Multiname { if (nskind == Namespace.KIND_NAMESPACE || nskind == Namespace.KIND_PACKAGE_INTERNAL) { DottedChain dc = abc.findCustomNs(namespace_index); String nsname = dc != null ? dc.getLast() : null; - - if (nsname != null) { + + if (nsname != null && !"AS3".equals(nsname)) { String identifier = dontDeobfuscate ? nsname : IdentifiersDeobfuscation.printIdentifier(true, nsname); if (identifier != null && !identifier.isEmpty()) { return nsname + "::" + name; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java index 8cbe5bf15..d7490075c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java @@ -331,6 +331,11 @@ public abstract class Trait implements Cloneable, Serializable { } public final GraphTextWriter getModifiers(ABC abc, boolean isStatic, GraphTextWriter writer) { + if ((kindFlags & ATTR_Final) > 0) { + if (!isStatic) { + writer.appendNoHilight("final "); + } + } if ((kindFlags & ATTR_Override) > 0) { writer.appendNoHilight("override "); } @@ -360,12 +365,7 @@ public abstract class Trait implements Cloneable, Serializable { } else { writer.appendNoHilight("static "); } - } - if ((kindFlags & ATTR_Final) > 0) { - if (!isStatic) { - writer.appendNoHilight("final "); - } - } + } return writer; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index 7b91eefcc..7764e2443 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -91,12 +91,13 @@ public class TraitMethodGetterSetter extends Trait { addKind = "set "; } MethodBody body = abc.findBody(method_info); - - if (((classIndex == -1) || (!abc.instance_info.get(classIndex).isInterface())) && (body == null)) { + + getModifiers(abc, isStatic, writer); + + if (abc.method_info.get(method_info).flagExplicit()) { writer.appendNoHilight("native "); } - getModifiers(abc, isStatic, writer); writer.hilightSpecial("function " + addKind, HighlightSpecialType.TRAIT_TYPE); writer.hilightSpecial(getName(abc).getName(abc.constants, fullyQualifiedNames, false, true), HighlightSpecialType.TRAIT_NAME); writer.appendNoHilight("(");