From 42f2d40b475db66486a4b4fe5b56751a640db5db Mon Sep 17 00:00:00 2001 From: pukkandan Date: Wed, 21 Jun 2023 08:51:14 +0530 Subject: [PATCH] Update to ytdl-commit-07af47 [YouTube] Improve fix for ae8ba2c https://github.com/ytdl-org/youtube-dl/commit/07af47960f3bb262ead02490ce65c8c45c01741e --- test/test_jsinterp.py | 26 ++++++++++++++++++++++++++ yt_dlp/casefold.py | 5 +++++ yt_dlp/jsinterp.py | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 yt_dlp/casefold.py diff --git a/test/test_jsinterp.py b/test/test_jsinterp.py index e9682ddab..86928a6a0 100644 --- a/test/test_jsinterp.py +++ b/test/test_jsinterp.py @@ -35,6 +35,21 @@ class TestJSInterpreter(unittest.TestCase): self._test('function f(){42}', None) self._test('var f = function(){return 42;}', 42) + def test_add(self): + self._test('function f(){return 42 + 7;}', 49) + self._test('function f(){return 42 + undefined;}', NaN) + self._test('function f(){return 42 + null;}', 42) + + def test_sub(self): + self._test('function f(){return 42 - 7;}', 35) + self._test('function f(){return 42 - undefined;}', NaN) + self._test('function f(){return 42 - null;}', 42) + + def test_mul(self): + self._test('function f(){return 42 * 7;}', 294) + self._test('function f(){return 42 * undefined;}', NaN) + self._test('function f(){return 42 * null;}', 0) + def test_div(self): jsi = JSInterpreter('function f(a, b){return a / b;}') self._test(jsi, NaN, args=(0, 0)) @@ -42,6 +57,17 @@ class TestJSInterpreter(unittest.TestCase): self._test(jsi, float('inf'), args=(2, 0)) self._test(jsi, 0, args=(0, 3)) + def test_mod(self): + self._test('function f(){return 42 % 7;}', 0) + self._test('function f(){return 42 % 0;}', NaN) + self._test('function f(){return 42 % undefined;}', NaN) + + def test_exp(self): + self._test('function f(){return 42 ** 2;}', 1764) + self._test('function f(){return 42 ** undefined;}', NaN) + self._test('function f(){return 42 ** null;}', 1) + self._test('function f(){return undefined ** 42;}', NaN) + def test_calc(self): self._test('function f(a){return 2*a+1;}', 7, args=[3]) diff --git a/yt_dlp/casefold.py b/yt_dlp/casefold.py new file mode 100644 index 000000000..41a53e5b6 --- /dev/null +++ b/yt_dlp/casefold.py @@ -0,0 +1,5 @@ +import warnings + +warnings.warn(DeprecationWarning(f'{__name__} is deprecated')) + +casefold = str.casefold diff --git a/yt_dlp/jsinterp.py b/yt_dlp/jsinterp.py index 9c280fb86..bda3fb459 100644 --- a/yt_dlp/jsinterp.py +++ b/yt_dlp/jsinterp.py @@ -812,9 +812,9 @@ class JSInterpreter: \((?P[^)]*)\)\s* (?P{.+})''' % {'name': re.escape(funcname)}, self.code) - code, _ = self._separate_at_paren(func_m.group('code')) if func_m is None: raise self.Exception(f'Could not find JS function "{funcname}"') + code, _ = self._separate_at_paren(func_m.group('code')) return [x.strip() for x in func_m.group('args').split(',')], code def extract_function(self, funcname):