diff options
Diffstat (limited to 'youtube_dl')
-rw-r--r-- | youtube_dl/swfinterp.py | 17 |
1 files changed, 16 insertions, 1 deletions
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) |