youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

commit e983cf52775e493b7deedbe48d2f50f598c9da4e
parent 0ab1ca5501108b8038090750e8455bfb5d72c443
Author: Philipp Hagemeister <phihag@phihag.de>
Date:   Mon, 17 Nov 2014 04:00:31 +0100

[swfinterp] Interpret yet more opcodes

Diffstat:
Atest/swftests/NeOperator.as | 24++++++++++++++++++++++++
Myoutube_dl/swfinterp.py | 19++++++++++++++++++-
2 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/test/swftests/NeOperator.as 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 @@ -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)