diff options
| -rw-r--r-- | test/swftests/NeOperator.as | 24 | ||||
| -rw-r--r-- | youtube_dl/swfinterp.py | 19 | 
2 files changed, 42 insertions, 1 deletions
diff --git a/test/swftests/NeOperator.as b/test/swftests/NeOperator.as new file mode 100644 index 000000000..61dcbc4e9 --- /dev/null +++ b/test/swftests/NeOperator.as @@ -0,0 +1,24 @@ +// input: [] +// output: 123 + +package { +public class NeOperator { +    public static function main(): int { +        var res:int = 0; +        if (1 != 2) { +            res += 3; +        } else { +            res += 4; +        } +        if (2 != 2) { +            res += 10; +        } else { +            res += 20; +        } +        if (9 == 9) { +            res += 100; +        } +        return res; +    } +} +} diff --git a/youtube_dl/swfinterp.py b/youtube_dl/swfinterp.py index 58da6c586..85efde592 100644 --- a/youtube_dl/swfinterp.py +++ b/youtube_dl/swfinterp.py @@ -393,7 +393,10 @@ class SWFInterpreter(object):                  self._classes_by_name, avm_class.variables])              while True:                  opcode = _read_byte(coder) -                if opcode == 17:  # iftrue +                if opcode == 16:  # jump +                    offset = s24() +                    coder.seek(coder.tell() + offset) +                elif opcode == 17:  # iftrue                      offset = s24()                      value = stack.pop()                      if value: @@ -403,6 +406,20 @@ class SWFInterpreter(object):                      value = stack.pop()                      if not value:                          coder.seek(coder.tell() + offset) +                elif opcode == 19:  # ifeq +                    offset = s24() +                    value2 = stack.pop() +                    value1 = stack.pop() +                    if value2 == value1: +                        coder.seek(coder.tell() + offset) +                elif opcode == 20:  # ifne +                    offset = s24() +                    value2 = stack.pop() +                    value1 = stack.pop() +                    if value2 != value1: +                        coder.seek(coder.tell() + offset) +                elif opcode == 32:  # pushnull +                    stack.append(None)                  elif opcode == 36:  # pushbyte                      v = _read_byte(coder)                      stack.append(v)  | 
