summary refs log tree commit diff
diff options
context:
space:
mode:
authorYen Chi Hsuan <yan12125@gmail.com>2015-11-10 12:54:02 +0800
committerYen Chi Hsuan <yan12125@gmail.com>2015-11-10 12:54:02 +0800
commitff29bf81f852941cd7bcef1c051c77eccd4857bc (patch)
tree46b3985f9dbc2544c6905ed35a87c93f8ba71140
parentb25f7533975d7463cc772e9d106802ef29252796 (diff)
downloadyoutube-dl-ff29bf81f852941cd7bcef1c051c77eccd4857bc.tar.gz
youtube-dl-ff29bf81f852941cd7bcef1c051c77eccd4857bc.tar.xz
youtube-dl-ff29bf81f852941cd7bcef1c051c77eccd4857bc.zip
[jsinterp] Support alternative function definition form
-rw-r--r--test/test_jsinterp.py3
-rw-r--r--youtube_dl/jsinterp.py4
2 files changed, 5 insertions, 2 deletions
diff --git a/test/test_jsinterp.py b/test/test_jsinterp.py
index fc73e5dc2..63c350b8f 100644
--- a/test/test_jsinterp.py
+++ b/test/test_jsinterp.py
@@ -19,6 +19,9 @@ class TestJSInterpreter(unittest.TestCase):
         jsi = JSInterpreter('function x3(){return 42;}')
         self.assertEqual(jsi.call_function('x3'), 42)
 
+        jsi = JSInterpreter('var x5 = function(){return 42;}')
+        self.assertEqual(jsi.call_function('x5'), 42)
+
     def test_calc(self):
         jsi = JSInterpreter('function x4(a){return 2*a+1;}')
         self.assertEqual(jsi.call_function('x4', 3), 7)
diff --git a/youtube_dl/jsinterp.py b/youtube_dl/jsinterp.py
index 0e0c7d90d..9bc855144 100644
--- a/youtube_dl/jsinterp.py
+++ b/youtube_dl/jsinterp.py
@@ -232,10 +232,10 @@ class JSInterpreter(object):
     def extract_function(self, funcname):
         func_m = re.search(
             r'''(?x)
-                (?:function\s+%s|[{;]%s\s*=\s*function)\s*
+                (?:function\s+%s|[{;]%s\s*=\s*function|var\s+%s\s*=\s*function)\s*
                 \((?P<args>[^)]*)\)\s*
                 \{(?P<code>[^}]+)\}''' % (
-                re.escape(funcname), re.escape(funcname)),
+                re.escape(funcname), re.escape(funcname), re.escape(funcname)),
             self.code)
         if func_m is None:
             raise ExtractorError('Could not find JS function %r' % funcname)