From 8d05f2c16a79e4127963d28bb41587105680e72c Mon Sep 17 00:00:00 2001 From: Philipp Hagemeister Date: Mon, 17 Nov 2014 04:36:23 +0100 Subject: [swfinterp] Add support for void methods --- youtube_dl/swfinterp.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'youtube_dl/swfinterp.py') diff --git a/youtube_dl/swfinterp.py b/youtube_dl/swfinterp.py index dd4dd060a..f4ee022f4 100644 --- a/youtube_dl/swfinterp.py +++ b/youtube_dl/swfinterp.py @@ -504,6 +504,9 @@ class SWFInterpreter(object): raise NotImplementedError( 'Unsupported property %r on %r' % (mname, obj)) + elif opcode == 71: # returnvoid + res = None + return res elif opcode == 72: # returnvalue res = stack.pop() return res @@ -527,6 +530,17 @@ class SWFInterpreter(object): args = list(reversed( [stack.pop() for _ in range(arg_count)])) obj = stack.pop() + if isinstance(obj, _AVMClass_Object): + func = self.extract_function(obj.avm_class, mname) + res = func(args) + assert res is None + continue + if isinstance(obj, _ScopeDict): + assert mname in obj.avm_class.method_names + func = self.extract_function(obj.avm_class, mname) + res = func(args) + assert res is None + continue if mname == 'reverse': assert isinstance(obj, list) obj.reverse() @@ -603,7 +617,8 @@ class SWFInterpreter(object): obj = stack.pop() assert isinstance(obj, (dict, _ScopeDict)), \ 'Accessing member %r on %r' % (pname, obj) - stack.append(obj[pname]) + res = obj.get(pname, None) + stack.append(res) else: # Assume attribute access idx = stack.pop() assert isinstance(idx, int) -- cgit 1.4.1