[swfinterp] Allow function patching
authorPhilipp Hagemeister <phihag@phihag.de>
Mon, 17 Nov 2014 00:27:15 +0000 (01:27 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Mon, 17 Nov 2014 00:27:15 +0000 (01:27 +0100)
youtube_dl/swfinterp.py

index b63c65b201ec2b34c6482e8526694431041f75fe..e5deb2c14df30c259b742ac73c2a765d94b56207 100644 (file)
@@ -150,6 +150,7 @@ def _read_byte(reader):
 
 class SWFInterpreter(object):
     def __init__(self, file_contents):
+        self._patched_functions = {}
         code_tag = next(tag
                         for tag_code, tag in _extract_tags(file_contents)
                         if tag_code == 82)
@@ -354,6 +355,9 @@ class SWFInterpreter(object):
 
         assert p + code_reader.tell() == len(code_tag)
 
+    def patch_function(self, avm_class, func_name, f):
+        self._patched_functions[(avm_class, func_name)] = f
+
     def extract_class(self, class_name):
         try:
             return self._classes_by_name[class_name]
@@ -361,6 +365,9 @@ class SWFInterpreter(object):
             raise ExtractorError('Class %r not found' % class_name)
 
     def extract_function(self, avm_class, func_name):
+        p = self._patched_functions.get((avm_class, func_name))
+        if p:
+            return p
         if func_name in avm_class.method_pyfunctions:
             return avm_class.method_pyfunctions[func_name]
         if func_name in self._classes_by_name: