mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[swfinterp] Add support for void methods
This commit is contained in:
		| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user