AS3: Incorrect handling of strict equals operator in if vs switch resulting in §§pop

This commit is contained in:
Jindra Petřík
2021-01-18 20:27:05 +01:00
parent 0f75283276
commit b2b54118f2
6 changed files with 34 additions and 3 deletions

View File

@@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
- Using new FFDec icon on Mac
- AS3: get/set slot for global scope
- Better continue in for / goto detection
- AS3: Incorrect handling of strict equals operator in if vs switch resulting in §§pop
### Changed
- AS3 test methods separated to classes

View File

@@ -537,9 +537,7 @@ public class AVM2Graph extends Graph {
switchedObject = new LocalRegAVM2Item(null, null, rightReg, null);
}
if(leftReg < 0 && rightReg < 0){
} else if (cnt == 1) {
if ((leftReg < 0 && rightReg < 0) || (cnt == 1)) {
stack.push(set);
} else {
part = part.nextParts.get(1);

View File

@@ -910,6 +910,16 @@ public class ActionScript3Test extends ActionScriptTestBase {
false);
}
@Test
public void testStrictEquals() {
decompileMethod("testStrictEquals", "var k:int = 6;\r\n"
+ "if(this.f() !== this.f())\r\n"
+ "{\r\n"
+ "trace(\"is eight\");\r\n"
+ "}\r\n",
false);
}
@Test
public void testStringConcat() {
decompileMethod("testStringConcat", "var k:int = 8;\r\n"

View File

@@ -59,6 +59,7 @@ package
TestProperty;
TestRegExp;
TestRest;
TestStrictEquals;
TestStringConcat;
TestStrings;
TestSwitch;

View File

@@ -0,0 +1,21 @@
package tests
{
public class TestStrictEquals
{
public function run() : void
{
var k:int = 6;
if (this.f() !== this.f()){
trace("is eight");
}
}
private function f():String {
return "x";
}
}
}