From 01c2079b07bfe26c3f7d399993a6c2929d62d094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Fri, 22 Jul 2016 21:35:48 +0200 Subject: [PATCH] AMF3 editor in GUI fixes Hex view fixes --- .../flash/amf/amf3/Amf3InputStream.java | 15 +++++++-------- .../decompiler/flash/amf/amf3/Amf3Value.java | 10 ++++++++++ .../decompiler/flash/tags/PlaceObject4Tag.java | 3 +-- .../gui/generictageditors/Amf3ValueEditor.java | 17 ++++++++++------- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3InputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3InputStream.java index c06785560..c13644348 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3InputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3InputStream.java @@ -34,11 +34,10 @@ public class Amf3InputStream extends InputStream { public final static Logger LOGGER = Logger.getLogger(Amf3InputStream.class.getName()); private final MemoryInputStream is; public DumpInfo dumpInfo; - private static String NO_REFERENCE_BIT_TEXT = "not reference"; - private static String REFERENCE_BIT_TEXT = "not reference"; - private static String OBJECT_INDEX_TEXT = "object index"; - private static String STRING_INDEX_TEXT = "string index"; - private static String TRAIT_INDEX_TEXT = "trait index"; + private static final String NO_REFERENCE_BIT_TEXT = "not reference"; + private static final String OBJECT_INDEX_TEXT = "object index"; + private static final String STRING_INDEX_TEXT = "string index"; + private static final String TRAIT_INDEX_TEXT = "trait index"; public Amf3InputStream(MemoryInputStream is) { this.is = is; @@ -146,11 +145,11 @@ public class Amf3InputStream extends InputStream { } private void renameU29O_ref() { - renameU29("U29O-ref", REFERENCE_BIT_TEXT, OBJECT_INDEX_TEXT); + renameU29("U29O-ref", NO_REFERENCE_BIT_TEXT, OBJECT_INDEX_TEXT); } private void renameU29S_ref() { - renameU29("U29S-ref", REFERENCE_BIT_TEXT, STRING_INDEX_TEXT); + renameU29("U29S-ref", NO_REFERENCE_BIT_TEXT, STRING_INDEX_TEXT); } private void renameU29Traits_ref() { @@ -493,7 +492,7 @@ public class Amf3InputStream extends InputStream { result = retObjectType; break markerswitch; } else { - renameU29("U29O-traits", NO_REFERENCE_BIT_TEXT, "not trait reference", "not externalized traits", "dynamic", "sealed count"); + renameU29("U29O-traits", NO_REFERENCE_BIT_TEXT, "not trait reference", "externalized traits", "dynamic", "sealed count"); int dynamicFlag = (int) ((objectU29 >> 3) & 1); int numSealed = (int) (objectU29 >> 4); LOGGER.log(Level.FINEST, "object dynamicFlag:{0}", dynamicFlag); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3Value.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3Value.java index 45d4a7b04..9da5c62a2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3Value.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3Value.java @@ -7,6 +7,10 @@ public class Amf3Value { private Object value; + public Amf3Value() { + setValue(null); + } + public Amf3Value(Object value) { setValue(value); } @@ -19,6 +23,9 @@ public class Amf3Value { } public static boolean isValueValid(Object value) { + if (value == null) { + return true; + } if (value instanceof Long) { return true; } @@ -43,6 +50,9 @@ public class Amf3Value { @Override public String toString() { + if (value == null) { + return ""; + } return Amf3Exporter.amfToString(value); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java index 5aed2b36b..f26ef451f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java @@ -430,8 +430,7 @@ public class PlaceObject4Tag extends PlaceObjectTypeTag implements ASMSourceCont if (placeFlagHasClipActions) { sos.writeCLIPACTIONS(clipActions); } - if (amfData != null) { - //sos.write(Helper.readFile("d:\\Dropbox\\Programovani\\JavaSE\\FFDec\\libsrc\\ffdec_lib\\testdata\\amf3\\generated\\all.bin")); + if (amfData != null && amfData.getValue() != null) { try { sos.writeAmf3Object(amfData); } catch (NoSerializerExistsException ex) { diff --git a/src/com/jpexs/decompiler/flash/gui/generictageditors/Amf3ValueEditor.java b/src/com/jpexs/decompiler/flash/gui/generictageditors/Amf3ValueEditor.java index 373dca6c2..222394eca 100644 --- a/src/com/jpexs/decompiler/flash/gui/generictageditors/Amf3ValueEditor.java +++ b/src/com/jpexs/decompiler/flash/gui/generictageditors/Amf3ValueEditor.java @@ -84,8 +84,12 @@ public class Amf3ValueEditor extends JEditorPane implements GenericTagEditor { this.fieldName = fieldName; try { Amf3Value val = (Amf3Value) ReflectionTools.getValue(obj, field, index); - String stringVal = Amf3Exporter.amfToString(val.getValue()); - setText(stringVal); + if (val == null || val.getValue() == null) { + setText(""); + } else { + String stringVal = Amf3Exporter.amfToString(val.getValue()); + setText(stringVal); + } } catch (IllegalArgumentException | IllegalAccessException ex) { // ignore } @@ -93,11 +97,9 @@ public class Amf3ValueEditor extends JEditorPane implements GenericTagEditor { @Override public void save() { - Amf3Importer importer = new Amf3Importer(); try { - Object newValue = importer.stringToAmf(getText()); - ReflectionTools.setValue(obj, field, index, new Amf3Value(newValue)); - } catch (IOException | Amf3ParseException | IllegalArgumentException | IllegalAccessException ex) { + ReflectionTools.setValue(obj, field, index, getChangedValue()); + } catch (IllegalArgumentException | IllegalAccessException ex) { //ignore } } @@ -118,8 +120,9 @@ public class Amf3ValueEditor extends JEditorPane implements GenericTagEditor { @Override public Object getChangedValue() { Amf3Importer importer = new Amf3Importer(); + String textVal = getText(); try { - return new Amf3Value(importer.stringToAmf(getText())); + return textVal.trim().isEmpty() ? null : new Amf3Value(importer.stringToAmf(textVal)); } catch (IOException | Amf3ParseException ex) { //ignore }