diff --git a/CHANGELOG.md b/CHANGELOG.md index 501309358..2f9b15b3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All notable changes to this project will be documented in this file. - [#1872] Removing PlaceObject/RemoveObject with no characterid with Remove character action - [#1692] Resolving use namespace - [#1692] Properly distinguish obfuscated names vs namespace suffixes and attributes +- [#1757] Binary search - SWF files need to be sorted by file position ### Changed - GFX - DefineExternalImage2 no longer handled as character @@ -2602,6 +2603,7 @@ All notable changes to this project will be documented in this file. [#1869]: https://www.free-decompiler.com/flash/issues/1869 [#1872]: https://www.free-decompiler.com/flash/issues/1872 [#1692]: https://www.free-decompiler.com/flash/issues/1692 +[#1757]: https://www.free-decompiler.com/flash/issues/1757 [#1867]: https://www.free-decompiler.com/flash/issues/1867 [#1868]: https://www.free-decompiler.com/flash/issues/1868 [#1649]: https://www.free-decompiler.com/flash/issues/1649 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BinarySWFBundle.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BinarySWFBundle.java index 4952f1e4c..50ba2fda4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BinarySWFBundle.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/BinarySWFBundle.java @@ -22,6 +22,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -45,7 +47,7 @@ public class BinarySWFBundle implements SWFBundle { @Override public Set getKeys() { - Set ret = new HashSet<>(); + Set ret = new LinkedHashSet<>(); for (Long address : search.getAddresses()) { ret.add("[" + address + "]"); } @@ -71,7 +73,7 @@ public class BinarySWFBundle implements SWFBundle { @Override public Map getAll() { - Map ret = new HashMap<>(); + Map ret = new LinkedHashMap<>(); for (String key : getKeys()) { ret.put(key, getSWF(key)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFSearch.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFSearch.java index 94714ebc3..9b9f7fcee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFSearch.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFSearch.java @@ -25,6 +25,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -44,7 +45,7 @@ public class SWFSearch { private final Set listeners = new HashSet<>(); - private final Map swfStreams = new HashMap<>(); + private final Map swfStreams = new LinkedHashMap<>(); public SWFSearch(Searchable s, boolean noCheck, SearchMode searchMode) { this.s = s; diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/StreamSearch.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/StreamSearch.java index 48959bf8b..5252d9f33 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/StreamSearch.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/StreamSearch.java @@ -19,6 +19,7 @@ package com.jpexs.helpers; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -42,7 +43,7 @@ public class StreamSearch implements Searchable { @Override public Map search(ProgressListener progListener, byte[]... data) { - Map ret = new HashMap<>(); + Map ret = new LinkedHashMap<>(); int maxFindLen = 0; for (int i = 0; i < data.length; i++) { if (data[i].length > maxFindLen) { @@ -84,7 +85,7 @@ public class StreamSearch implements Searchable { } if (match) { // todo: support > 2GB files - InputStream fis = new MemoryInputStream(is.getAllRead(), (int) pos + i); + InputStream fis = new MemoryInputStream(is.getAllRead(), (int) pos + i); ret.put(pos + i, fis); continue loopdata; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/SwfHeaderStreamSearch.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/SwfHeaderStreamSearch.java index cd90da164..92716ffa1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/SwfHeaderStreamSearch.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/SwfHeaderStreamSearch.java @@ -19,6 +19,7 @@ package com.jpexs.helpers; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -44,7 +45,7 @@ public class SwfHeaderStreamSearch implements Searchable { public Map search(ProgressListener progListener, byte[]... data) { // Ignore data parameter, find only FWS, CWS, ZWS, GFX and CFX - Map ret = new HashMap<>(); + Map ret = new LinkedHashMap<>(); byte[] buf = is.getAllRead(); byte byte2 = buf[0], byte3 = buf[1]; boolean match = false;