diff --git a/CHANGELOG.md b/CHANGELOG.md index f9bbee532..b5ec0acbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ All notable changes to this project will be documented in this file. - Raw edit of fonts - shape table was not visible - [#2211] PDF export, Font export - glyphs with no contours (advance only) - [#2212] GFX - Allow loading (DDS) images despite of set bitmapFormat +- [#2202] AS2 detection of uninitialized class fields colliding with setters/getters ### Changed - [#2185] MochiCrypt no longer offered for auto decrypt, user needs to choose variant from "Use unpacker" menu @@ -3400,6 +3401,7 @@ Major version of SWF to XML export changed to 2. [#2190]: https://www.free-decompiler.com/flash/issues/2190 [#2211]: https://www.free-decompiler.com/flash/issues/2211 [#2212]: https://www.free-decompiler.com/flash/issues/2212 +[#2202]: https://www.free-decompiler.com/flash/issues/2202 [#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/action/as2/UninitializedClassFieldsDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java index 4910ffb96..6bced1861 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java @@ -213,6 +213,11 @@ public class UninitializedClassFieldsDetector { GraphTargetItem value = en.getValue(); boolean isStatic = cai.traitsStatic.get(i); if (value instanceof FunctionActionItem) { + if (name.startsWith("__get__") || name.startsWith("__set__")) { + String vname = name.substring(7); + Variable v = new Variable(isStatic, vname, vname, className); + classTraits.get(className).put(vname, v); + } Method m = new Method(isStatic, name, "Unknown" /*FIXME?*/, className); classTraits.get(className).put(name, m); } else { diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2UninitializedFieldsTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2UninitializedFieldsTest.java index 294ff661d..b32da0830 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2UninitializedFieldsTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript2UninitializedFieldsTest.java @@ -91,7 +91,9 @@ public class ActionScript2UninitializedFieldsTest extends ActionScript2TestBase + " var f;\n" + " var c;\n" + " var d;\n" + + " var _v3;\n" + " static var sv2;\n" + + " static var _sv3;\n" + " static var sv;\n" + " var init_v = 2;\n" + " static var sinit_v = 3;\n" @@ -121,6 +123,27 @@ public class ActionScript2UninitializedFieldsTest extends ActionScript2TestBase + " function deleteD()\n" + " {\n" + " delete this.d;\n" + + " }\n" + + " function set v3(val)\n" + + " {\n" + + " this._v3 = val;\n" + + " }\n" + + " function get v3()\n" + + " {\n" + + " return this._v3;\n" + + " }\n" + + " static function set sv3(val)\n" + + " {\n" + + " com.jpexs.MyClass._sv3 = val;\n" + + " }\n" + + " static function get sv3()\n" + + " {\n" + + " return com.jpexs.MyClass._sv3;\n" + + " }\n" + + " function setV3()\n" + + " {\n" + + " this.v = this.v3;\n" + + " com.jpexs.MyClass.sv = com.jpexs.MyClass.sv3;\n" + " }"); } } diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.swf b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.swf index 7fda9c12d..540be2b0f 100644 Binary files a/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.swf and b/libsrc/ffdec_lib/testdata/as2_initfields/as2_initfields.swf differ diff --git a/libsrc/ffdec_lib/testdata/as2_initfields/com/jpexs/MyClass.as b/libsrc/ffdec_lib/testdata/as2_initfields/com/jpexs/MyClass.as index 05ba66503..71208ce91 100644 --- a/libsrc/ffdec_lib/testdata/as2_initfields/com/jpexs/MyClass.as +++ b/libsrc/ffdec_lib/testdata/as2_initfields/com/jpexs/MyClass.as @@ -1,4 +1,4 @@ -class com.jpexs.MyClass { +class com.jpexs.MyClass { var v; static var sv; var v2; @@ -9,9 +9,12 @@ class com.jpexs.MyClass { var c; var d; - + + var _v3; + static var _sv3; + var init_v = 2; - static var sinit_v = 3; + static var sinit_v = 3; function testVar() { this.v = 1; @@ -36,4 +39,25 @@ class com.jpexs.MyClass { function deleteD() { delete d; } + + function set v3(val) { + this._v3 = val; + } + + function get v3() { + return this._v3; + } + + static function set sv3(val) { + MyClass._sv3 = val; + } + + static function get sv3() { + return MyClass._sv3; + } + + function setV3() { + this.v = this.v3; + MyClass.sv = MyClass.sv3; + } }