mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	| @@ -445,6 +445,22 @@ class TestJSInterpreter(unittest.TestCase): | |||||||
|         jsi = JSInterpreter('function x(){return 1236566549 << 5}') |         jsi = JSInterpreter('function x(){return 1236566549 << 5}') | ||||||
|         self.assertEqual(jsi.call_function('x'), 915423904) |         self.assertEqual(jsi.call_function('x'), 915423904) | ||||||
| 
 | 
 | ||||||
|  |     def test_negative(self): | ||||||
|  |         jsi = JSInterpreter("function f(){return 2    *    -2.0;}") | ||||||
|  |         self.assertEqual(jsi.call_function('f'), -4) | ||||||
|  | 
 | ||||||
|  |         jsi = JSInterpreter('function f(){return 2    -    - -2;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 0) | ||||||
|  | 
 | ||||||
|  |         jsi = JSInterpreter('function f(){return 2    -    - - -2;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 4) | ||||||
|  | 
 | ||||||
|  |         jsi = JSInterpreter('function f(){return 2    -    + + - -2;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 0) | ||||||
|  | 
 | ||||||
|  |         jsi = JSInterpreter('function f(){return 2    +    - + - -2;}') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 0) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
| @@ -142,6 +142,10 @@ _NSIG_TESTS = [ | |||||||
|         'https://www.youtube.com/s/player/dac945fd/player_ias.vflset/en_US/base.js', |         'https://www.youtube.com/s/player/dac945fd/player_ias.vflset/en_US/base.js', | ||||||
|         'o8BkRxXhuYsBCWi6RplPdP', '3Lx32v_hmzTm6A', |         'o8BkRxXhuYsBCWi6RplPdP', '3Lx32v_hmzTm6A', | ||||||
|     ), |     ), | ||||||
|  |     ( | ||||||
|  |         'https://www.youtube.com/s/player/6f20102c/player_ias.vflset/en_US/base.js', | ||||||
|  |         'lE8DhoDmKqnmJJ', 'pJTTX6XyJP2BYw', | ||||||
|  |     ), | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -243,7 +243,7 @@ class JSInterpreter: | |||||||
|             return |             return | ||||||
|         counters = {k: 0 for k in _MATCHING_PARENS.values()} |         counters = {k: 0 for k in _MATCHING_PARENS.values()} | ||||||
|         start, splits, pos, delim_len = 0, 0, 0, len(delim) - 1 |         start, splits, pos, delim_len = 0, 0, 0, len(delim) - 1 | ||||||
|         in_quote, escaping, after_op, in_regex_char_group = None, False, True, False |         in_quote, escaping, after_op, in_regex_char_group, in_unary_op = None, False, True, False, False | ||||||
|         for idx, char in enumerate(expr): |         for idx, char in enumerate(expr): | ||||||
|             if not in_quote and char in _MATCHING_PARENS: |             if not in_quote and char in _MATCHING_PARENS: | ||||||
|                 counters[_MATCHING_PARENS[char]] += 1 |                 counters[_MATCHING_PARENS[char]] += 1 | ||||||
| @@ -258,9 +258,11 @@ class JSInterpreter: | |||||||
|                 elif in_quote == '/' and char in '[]': |                 elif in_quote == '/' and char in '[]': | ||||||
|                     in_regex_char_group = char == '[' |                     in_regex_char_group = char == '[' | ||||||
|             escaping = not escaping and in_quote and char == '\\' |             escaping = not escaping and in_quote and char == '\\' | ||||||
|             after_op = not in_quote and char in OP_CHARS or (char.isspace() and after_op) |             in_unary_op = (not in_quote and not in_regex_char_group | ||||||
|  |                            and after_op not in (True, False) and char in '-+') | ||||||
|  |             after_op = char if (not in_quote and char in OP_CHARS) else (char.isspace() and after_op) | ||||||
| 
 | 
 | ||||||
|             if char != delim[pos] or any(counters.values()) or in_quote: |             if char != delim[pos] or any(counters.values()) or in_quote or in_unary_op: | ||||||
|                 pos = 0 |                 pos = 0 | ||||||
|                 continue |                 continue | ||||||
|             elif pos != delim_len: |             elif pos != delim_len: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan