From ee4d21b88f3f88206afccd0ee7d9a2e9c730f530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Wed, 2 Jul 2025 21:11:43 +0200 Subject: [PATCH] Detect uninitialized class fields only in __Packages folder --- .../ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java | 10 +++++++--- .../jpexs/decompiler/flash/tags/DoInitActionTag.java | 11 ++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index bf8570b39..6e43ad879 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -6286,9 +6286,13 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { public boolean needsCalculatingAS2UninitializeClassTraits(ASMSource src) { if (!isAS3()) { if (src instanceof DoInitActionTag) { - if (uninitializedAs2ClassTraits == null) { - return true; - } + DoInitActionTag doi = (DoInitActionTag) src; + String exportName = doi.getSwf().getCharacter(doi.getCharacterId()).getExportName(); + if (exportName != null && exportName.startsWith("__Packages.")) { + if (uninitializedAs2ClassTraits == null) { + return true; + } + } } } return false; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java index 0db3f1358..12e61feb2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java @@ -39,6 +39,7 @@ import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Helper; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -158,7 +159,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { actions = getActions(); } - return Action.actionsToSource(swf.getUninitializedAs2ClassTraits(), this, actions, getScriptName(), writer, getCharset()); + return Action.actionsToSource(requiresUninitielizedClassTraitsDetection() ? swf.getUninitializedAs2ClassTraits() : new HashMap<>(), this, actions, getScriptName(), writer, getCharset()); } @Override @@ -167,7 +168,11 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { actions = getActions(); } - return Action.actionsToSource(swf.getUninitializedAs2ClassTraits(), this, actions, getScriptName(), writer, getCharset(), treeOperations); + return Action.actionsToSource(requiresUninitielizedClassTraitsDetection() ? swf.getUninitializedAs2ClassTraits() : new HashMap<>(), this, actions, getScriptName(), writer, getCharset(), treeOperations); + } + + private boolean requiresUninitielizedClassTraitsDetection() { + return swf.needsCalculatingAS2UninitializeClassTraits(this); } @Override @@ -297,7 +302,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { @Override public List getActionsToTree() { try { - return Action.actionsToTree(swf.getUninitializedAs2ClassTraits(), true, false, getActions(), swf.version, 0, getScriptName(), swf.getCharset()); + return Action.actionsToTree(requiresUninitielizedClassTraitsDetection() ? swf.getUninitializedAs2ClassTraits() : new HashMap<>(), true, false, getActions(), swf.version, 0, getScriptName(), swf.getCharset()); } catch (InterruptedException ex) { return new ArrayList<>(); }