Fixed #1972 AS3 Renaming invalid identifiers - various fixes

Fixed #1972 AS3 imports taken only from packages, not package internal
This commit is contained in:
Jindra Petřík
2023-02-14 22:10:17 +01:00
parent 45a7d36067
commit 08456da845
5 changed files with 124 additions and 55 deletions

View File

@@ -2690,9 +2690,23 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
}
public int deobfuscateAS3Identifiers(RenameType renameType) {
Map<Tag, Map<Integer, String>> stringUsageTypesMap = new HashMap<>();
Map<Tag, Set<Integer>> stringUsagesMap = new HashMap<>();
informListeners("deobfuscate", "Getting usages...");
for (Tag tag : getTags()) {
if (tag instanceof ABCContainerTag) {
((ABCContainerTag) tag).getABC().deobfuscateIdentifiers(deobfuscated, renameType, true);
if (tag instanceof ABCContainerTag) {
Map<Integer, String> stringUsageTypes = new HashMap<>();
Set<Integer> stringUsages = ((ABCContainerTag)tag).getABC().getStringUsages();
((ABCContainerTag)tag).getABC().getStringUsageTypes(stringUsageTypes);
stringUsageTypesMap.put(tag, stringUsageTypes);
stringUsagesMap.put(tag, stringUsages);
}
}
for (Tag tag : getTags()) {
if (tag instanceof ABCContainerTag) {
((ABCContainerTag) tag).getABC().deobfuscateIdentifiers(stringUsageTypesMap.get(tag),stringUsagesMap.get(tag), deobfuscated, renameType, true);
((ABCContainerTag) tag).getABC().constants.clearCachedMultinames();
((ABCContainerTag) tag).getABC().constants.clearCachedDottedChains();
tag.setModified(true);
@@ -2700,7 +2714,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
}
for (Tag tag : getTags()) {
if (tag instanceof ABCContainerTag) {
((ABCContainerTag) tag).getABC().deobfuscateIdentifiers(deobfuscated, renameType, false);
((ABCContainerTag) tag).getABC().deobfuscateIdentifiers(stringUsageTypesMap.get(tag),stringUsagesMap.get(tag), deobfuscated, renameType, false);
((ABCContainerTag) tag).getABC().constants.clearCachedMultinames();
((ABCContainerTag) tag).getABC().constants.clearCachedDottedChains();
tag.setModified(true);