diff --git a/CHANGELOG.md b/CHANGELOG.md index 4702aaaca..a320267fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,8 @@ All notable changes to this project will be documented in this file. (Debug listening capability - only for SWFs previously prepared by FFDec) - TTF export - setting italic / bold flags in the font - ffdec-cli.exe is signed -- [#2636] AS3 QName properties with nonvalid identifiers handled as square brackets +- [#2636] AS3 QName properties with nonvalid identifiers handled as strings in brackets + (Can be turned on in advanced settings) ### Fixed - Metadata formatting diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java index 1d29a2e1f..e52dd1f0e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java @@ -207,7 +207,11 @@ public abstract class AVM2Item extends GraphTargetItem { } } else { isValidName = true; - } + } + + if (!Configuration.as3QNameObfuscatedPropsInSquareBrackets.get()) { + isValidName = true; + } if (isValidName) { if (((FullMultinameAVM2Item) propertyName).name != null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index a302cade3..f7f5f9943 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.types.Namespace; +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.helpers.hilight.HighlightSpecialType; @@ -216,7 +217,7 @@ public class FullMultinameAVM2Item extends AVM2Item { String localName; boolean isAttribute = constants.getMultiname(multinameIndex).isAttribute(); String namespaceSuffix = constants.getMultiname(multinameIndex).getNamespaceSuffix(); - if (!isAttribute && afterDot && namespaceSuffix.isEmpty()) { + if (!isAttribute && afterDot && namespaceSuffix.isEmpty() && Configuration.as3QNameObfuscatedPropsInSquareBrackets.get()) { //do not deobfuscate localName = constants.getMultiname(multinameIndex).getNameAndCustomNamespace(new HashSet<>(), localData.abc, fullyQualifiedNames, true, true, customNsRef); } else { @@ -230,7 +231,7 @@ public class FullMultinameAVM2Item extends AVM2Item { writer.appendNoHilight("::"); } - if (!isAttribute && afterDot && namespaceSuffix.isEmpty()) { + if (!isAttribute && afterDot && namespaceSuffix.isEmpty() && Configuration.as3QNameObfuscatedPropsInSquareBrackets.get()) { if (IdentifiersDeobfuscation.isValidName(true, localName)) { writer.append(localName); } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index d23ce2bba..b2688b681 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -1197,6 +1197,10 @@ public final class Configuration { @ConfigurationCategory("ui") public static ConfigurationItem showDebugListenInfo = null; + @ConfigurationDefaultBoolean(false) + @ConfigurationCategory("script") + public static ConfigurationItem as3QNameObfuscatedPropsInSquareBrackets = null; + private static Map configurationDescriptions = new LinkedHashMap<>(); private static Map configurationTitles = new LinkedHashMap<>(); diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties index b44b799b1..5e76d7e7a 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties @@ -663,5 +663,9 @@ config.name.lastExportMorphNumberOfFrames = Last setting of export morph number config.description.lastExportMorphNumberOfFrames = Last setting of export morphshape number of frames. #after 25.0.0 -config.name.showDebugListenInfo = Zobrazit informaci p\u0159ed naslouch\u00e1n\u00edm lad\u011bn\u00ed -config.description.showDebugListenInfo = Zobraz\u00ed informace o tom jak naslouch\u00e1n\u00ed lad\u011bn\u00ed funguje po kliku na Naslouchat lad\u011bn\u00ed v menu. +config.name.showDebugListenInfo = Show information before debug listening +config.description.showDebugListenInfo = Displays some info about how debug listening works after clicking Debug listen in the menu. + +config.name.as3QNameObfuscatedPropsInSquareBrackets = Show AS3 obfuscated QName properties in brackets +config.description.as3QNameObfuscatedPropsInSquareBrackets = Displays AS3 obfuscated QName properties as strings in brackets. + diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties index df0b849ab..b32168975 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties @@ -663,5 +663,8 @@ config.name.lastExportMorphNumberOfFrames = Posledn\u00ed nastaven\u00ed po\u010 config.description.lastExportMorphNumberOfFrames = Posledn\u00ed nastaven\u00ed exportu morphshape - po\u010det sn\u00edmk\u016f. #after 25.0.0 -config.name.showDebugListenInfo = Show information before debug listening -config.description.showDebugListenInfo = Displays some info about how debug listening works after clicking Debug listen in the menu. +config.name.showDebugListenInfo = Zobrazit informaci p\u0159ed naslouch\u00e1n\u00edm lad\u011bn\u00ed +config.description.showDebugListenInfo = Zobraz\u00ed informace o tom jak naslouch\u00e1n\u00ed lad\u011bn\u00ed funguje po kliku na Naslouchat lad\u011bn\u00ed v menu. + +config.name.as3QNameObfuscatedPropsInSquareBrackets = Zobrazit AS3 obfuskovan\u00e9 QName vlastnosti v hranat\u00fdch z\u00e1vork\u00e1ch +config.description.as3QNameObfuscatedPropsInSquareBrackets = Zobraz\u00ed AS3 obfuskovan\u00e9 QName vlastnosti v \u0159et\u011bzc\u00edch v hranat\u00fdch z\u00e1vork\u00e1ch.