From c58c1f6bfa3f6408dbe98e5d70855ac8f4fd623e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Fri, 29 Sep 2023 20:18:00 +0200 Subject: [PATCH] ABC Explorer - Try to avoid index out of bounds --- .../src/com/jpexs/decompiler/flash/abc/types/Multiname.java | 6 ++++++ .../com/jpexs/decompiler/flash/abc/types/ScriptInfo.java | 3 +++ 2 files changed, 9 insertions(+) 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 a429b0c30..72d3d9dcc 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 @@ -254,6 +254,9 @@ public class Multiname { if (index == 0) { return "null"; } + if (index >= constants.getNamespaceCount()) { + return "Unknown(" + index + ")"; + } int type = constants.getNamespace(index).kind; int name_index = constants.getNamespace(index).name_index; String name = name_index == 0 ? null : constants.getNamespace(index).getName(constants).toRawString(); @@ -273,6 +276,9 @@ public class Multiname { if (index == 0) { return "null"; } + if (index >= constants.getNamespaceSetCount()) { + return "Unknown(" + index + ")"; + } StringBuilder ret = new StringBuilder(); ret.append("["); for (int n = 0; n < constants.getNamespaceSet(index).namespaces.length; n++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java index b69ee5c4c..4f7bb3cca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java @@ -74,6 +74,9 @@ public class ScriptInfo { for (int j = 0; j < traits.traits.size(); j++) { Trait t = traits.traits.get(j); + if (t.name_index >= abc.constants.getMultinameCount()) { + continue; + } Multiname name = t.getName(abc); int nskind = name.getSimpleNamespaceKind(abc.constants); if ((nskind == Namespace.KIND_PACKAGE_INTERNAL)