From 1aa950424003f40bfb502115d3ded81cebb5a8c4 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 18 Jul 2015 21:00:32 +0200 Subject: [PATCH] AS2 parser: add string to constant pool, if there is enough space --- .../action/parser/script/ActionScript2Parser.java | 12 ++++++++++-- .../flash/action/swf5/ActionConstantPool.java | 4 ++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java index b29c245e9..7879d386c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionScript2Parser.java @@ -1810,9 +1810,17 @@ public class ActionScript2Parser { private DirectValueActionItem pushConst(String s) throws IOException, ActionParseException { int index = constantPool.indexOf(s); if (index == -1) { - constantPool.add(s); - index = constantPool.indexOf(s); + if (ActionConstantPool.calculateSize(constantPool) + ActionConstantPool.calculateSize(s) <= 0xffff) { + // constant pool is not full + constantPool.add(s); + index = constantPool.indexOf(s); + } } + + if (index == -1) { + return new DirectValueActionItem(null, 0, s, constantPool); + } + return new DirectValueActionItem(null, 0, new ConstantIndex(index), constantPool); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java index fdfbf6afd..fbd571b8c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java @@ -80,6 +80,10 @@ public class ActionConstantPool extends Action { return calculateSize(constantPool); } + public static int calculateSize(String str) { + return Utf8Helper.getBytesLength(str) + 1; + } + public static int calculateSize(List strings) { int res = 2; for (String s : strings) {