mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[swfinterp] Implement String basics
This commit is contained in:
		| @@ -148,6 +148,9 @@ def _read_byte(reader): | ||||
|     return res | ||||
|  | ||||
|  | ||||
| StringClass = _AVMClass('(no name idx)', 'String') | ||||
|  | ||||
|  | ||||
| class SWFInterpreter(object): | ||||
|     def __init__(self, file_contents): | ||||
|         self._patched_functions = {} | ||||
| @@ -483,6 +486,17 @@ class SWFInterpreter(object): | ||||
|                             res = args[0].join(obj) | ||||
|                             stack.append(res) | ||||
|                             continue | ||||
|                     elif obj == StringClass: | ||||
|                         if mname == 'String': | ||||
|                             assert len(args) == 1 | ||||
|                             assert isinstance(args[0], (int, compat_str)) | ||||
|                             res = compat_str(args[0]) | ||||
|                             stack.append(res) | ||||
|                             continue | ||||
|                         else: | ||||
|                             raise NotImplementedError( | ||||
|                                 'Function String.%s is not yet implemented' | ||||
|                                 % mname) | ||||
|                     raise NotImplementedError( | ||||
|                         'Unsupported property %r on %r' | ||||
|                         % (mname, obj)) | ||||
| @@ -532,7 +546,10 @@ class SWFInterpreter(object): | ||||
|                             break | ||||
|                     else: | ||||
|                         res = scopes[0] | ||||
|                     stack.append(res[mname]) | ||||
|                     if mname not in res and mname == 'String': | ||||
|                         stack.append(StringClass) | ||||
|                     else: | ||||
|                         stack.append(res[mname]) | ||||
|                 elif opcode == 94:  # findproperty | ||||
|                     index = u30() | ||||
|                     mname = self.multinames[index] | ||||
| @@ -576,7 +593,7 @@ class SWFInterpreter(object): | ||||
|                     pname = self.multinames[index] | ||||
|                     if pname == 'length': | ||||
|                         obj = stack.pop() | ||||
|                         assert isinstance(obj, list) | ||||
|                         assert isinstance(obj, (compat_str, list)) | ||||
|                         stack.append(len(obj)) | ||||
|                     elif isinstance(pname, compat_str):  # Member access | ||||
|                         obj = stack.pop() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister