diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cd35fc50..951fb24c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ All notable changes to this project will be documented in this file. - [#2222] Missing shapes when gradient fillstyle has only two gradrecords with the same ratio - [#2224] Exporting Embed assets - handling DefineBits(+JPEGTables) - convert to DefineBitsJPEG2 - [PR191] Saving class name during AS3 P-code class trait editation +- [#2231] AS3 coercion to String as convert ### Changed - [#2185] MochiCrypt no longer offered for auto decrypt, user needs to choose variant from "Use unpacker" menu @@ -3410,6 +3411,7 @@ Major version of SWF to XML export changed to 2. [#2202]: https://www.free-decompiler.com/flash/issues/2202 [#2222]: https://www.free-decompiler.com/flash/issues/2222 [#2224]: https://www.free-decompiler.com/flash/issues/2224 +[#2231]: https://www.free-decompiler.com/flash/issues/2231 [#2206]: https://www.free-decompiler.com/flash/issues/2206 [#2100]: https://www.free-decompiler.com/flash/issues/2100 [#2123]: https://www.free-decompiler.com/flash/issues/2123 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java index b67d77f44..53858923b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java @@ -88,11 +88,12 @@ public class CoerceAVM2Item extends AVM2Item { } break; case "String": - displayCoerce = !valueReturnType.equals(TypeItem.STRING) + /*displayCoerce = !valueReturnType.equals(TypeItem.STRING) && !valueReturnType.equals(new TypeItem("XML")) && !valueReturnType.equals(new TypeItem("XMLList")) && !valueReturnType.equals(new TypeItem("null")) - && !valueReturnType.equals(TypeItem.UNBOUNDED); + && !valueReturnType.equals(TypeItem.UNBOUNDED);*/ + displayCoerce = false; break; default: displayCoerce = false; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java index dd2ab52e9..13a9d5b99 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java @@ -1770,6 +1770,13 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testStringCoerce() { + decompileMethod("classic_air", "testStringCoerce", "var text1:String = this.a[\"test\"];\r\n" + + "var text2:String = String(this.a[\"test\"]);\r\n", + false); + } + @Test public void testStringConcat() { decompileMethod("classic_air", "testStringConcat", "var k:int = 8;\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java index e2d0e840a..036a076d2 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java @@ -1757,6 +1757,13 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testStringCoerce() { + decompileMethod("classic", "testStringCoerce", "var text1:String = this.a[\"test\"];\r\n" + + "var text2:String = String(this.a[\"test\"]);\r\n", + false); + } + @Test public void testStringConcat() { decompileMethod("classic", "testStringConcat", "var k:int = 8;\r\n" diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf index fcc4ac129..331207630 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf index 91e8a4de6..337530aa3 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as index 72e7a75bf..97329f3ab 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as @@ -107,6 +107,7 @@ package TestSlots; TestSlots2; TestStrictEquals; + TestStringCoerce; TestStringConcat; TestStrings; TestSwitch; diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestStringCoerce.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestStringCoerce.as new file mode 100644 index 000000000..14437a7dd --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestStringCoerce.as @@ -0,0 +1,14 @@ +package tests +{ + + public class TestStringCoerce + { + var a:Object = null; + + public function run():* + { + var text1:String = this.a["test"]; + var text2:String = String(this.a["test"]); + } + } +}