X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fswfinterp.py;fp=youtube_dl%2Fswfinterp.py;h=f4ee022f4e3fc3052f6ca9fbb9e19c5653b08a93;hb=8d05f2c16a79e4127963d28bb41587105680e72c;hp=dd4dd060ad1fa8041c6351408ab9f79996390e0c;hpb=a4bb83956cf3aa4f569c30b4d144b4fb327c7b56;p=youtube-dl 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)