mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[jsinterp] Fix div bug breaking player 8c7583ff
Thx bashonly: https://github.com/ytdl-org/youtube-dl/issues/32292#issuecomment-1585639223 Fixes #32292
This commit is contained in:
		| @@ -33,6 +33,55 @@ class TestJSInterpreter(unittest.TestCase): | |||||||
|         jsi = JSInterpreter('function x4(a){return 2*a+1;}') |         jsi = JSInterpreter('function x4(a){return 2*a+1;}') | ||||||
|         self.assertEqual(jsi.call_function('x4', 3), 7) |         self.assertEqual(jsi.call_function('x4', 3), 7) | ||||||
|  |  | ||||||
|  |     def test_add(self): | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 + 7;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 49) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 + undefined;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f'))) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 + null;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 42) | ||||||
|  |  | ||||||
|  |     def test_sub(self): | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 - 7;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 35) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 - undefined;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f'))) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 - null;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 42) | ||||||
|  |  | ||||||
|  |     def test_mul(self): | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 * 7;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 294) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 * undefined;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f'))) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 * null;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 0) | ||||||
|  |  | ||||||
|  |     def test_div(self): | ||||||
|  |         jsi = JSInterpreter('function f(a, b){return a / b;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f', 0, 0))) | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f', JS_Undefined, 1))) | ||||||
|  |         self.assertTrue(math.isinf(jsi.call_function('f', 2, 0))) | ||||||
|  |         self.assertEqual(jsi.call_function('f', 0, 3), 0) | ||||||
|  |  | ||||||
|  |     def test_mod(self): | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 % 7;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 0) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 % 0;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f'))) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 % undefined;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f'))) | ||||||
|  |  | ||||||
|  |     def test_exp(self): | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 ** 2;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 1764) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 ** undefined;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f'))) | ||||||
|  |         jsi = JSInterpreter('function f(){return 42 ** null;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 1) | ||||||
|  |         jsi = JSInterpreter('function f(){return undefined ** 42;}') | ||||||
|  |         self.assertTrue(math.isnan(jsi.call_function('f'))) | ||||||
|  |  | ||||||
|     def test_empty_return(self): |     def test_empty_return(self): | ||||||
|         jsi = JSInterpreter('function f(){return; y()}') |         jsi = JSInterpreter('function f(){return; y()}') | ||||||
|         self.assertEqual(jsi.call_function('f'), None) |         self.assertEqual(jsi.call_function('f'), None) | ||||||
|   | |||||||
| @@ -151,6 +151,10 @@ _NSIG_TESTS = [ | |||||||
|         'https://www.youtube.com/s/player/cfa9e7cb/player_ias.vflset/en_US/base.js', |         'https://www.youtube.com/s/player/cfa9e7cb/player_ias.vflset/en_US/base.js', | ||||||
|         'qO0NiMtYQ7TeJnfFG2', 'k9cuJDHNS5O7kQ', |         'qO0NiMtYQ7TeJnfFG2', 'k9cuJDHNS5O7kQ', | ||||||
|     ), |     ), | ||||||
|  |     ( | ||||||
|  |         'https://www.youtube.com/s/player/8c7583ff/player_ias.vflset/en_US/base.js', | ||||||
|  |         'E2AQVN6y_zM7uN9w8z', '9A2dbY5GDZrt9A', | ||||||
|  |     ), | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -82,7 +82,7 @@ def _js_arith_op(op): | |||||||
|  |  | ||||||
|  |  | ||||||
| def _js_div(a, b): | def _js_div(a, b): | ||||||
|     if JS_Undefined in (a, b) or not (a and b): |     if JS_Undefined in (a, b) or not (a or b): | ||||||
|         return _NaN |         return _NaN | ||||||
|     return operator.truediv(a or 0, b) if b else float('inf') |     return operator.truediv(a or 0, b) if b else float('inf') | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user