mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[jsinterp] Disable comment support
We need a proper lexer to be able to understand YouTube's code, which contains /* inside of strings. For now it's sufficient to just disable comment support altogether. Fixes #4976, fixes #4979, fixes #4980, fixes #4981, fixes #4982. Closes #4977.
This commit is contained in:
		| @@ -70,6 +70,8 @@ class TestJSInterpreter(unittest.TestCase): | |||||||
|         self.assertEqual(jsi.call_function('f'), -11) |         self.assertEqual(jsi.call_function('f'), -11) | ||||||
|  |  | ||||||
|     def test_comments(self): |     def test_comments(self): | ||||||
|  |         'Skipping: Not yet fully implemented' | ||||||
|  |         return | ||||||
|         jsi = JSInterpreter(''' |         jsi = JSInterpreter(''' | ||||||
|         function x() { |         function x() { | ||||||
|             var x = /* 1 + */ 2; |             var x = /* 1 + */ 2; | ||||||
| @@ -80,6 +82,15 @@ class TestJSInterpreter(unittest.TestCase): | |||||||
|         ''') |         ''') | ||||||
|         self.assertEqual(jsi.call_function('x'), 52) |         self.assertEqual(jsi.call_function('x'), 52) | ||||||
|  |  | ||||||
|  |         jsi = JSInterpreter(''' | ||||||
|  |         function f() { | ||||||
|  |             var x = "/*"; | ||||||
|  |             var y = 1 /* comment */ + 2; | ||||||
|  |             return y; | ||||||
|  |         } | ||||||
|  |         ''') | ||||||
|  |         self.assertEqual(jsi.call_function('f'), 3) | ||||||
|  |  | ||||||
|     def test_precedence(self): |     def test_precedence(self): | ||||||
|         jsi = JSInterpreter(''' |         jsi = JSInterpreter(''' | ||||||
|         function x() { |         function x() { | ||||||
|   | |||||||
| @@ -64,6 +64,12 @@ _TESTS = [ | |||||||
|         'js', |         'js', | ||||||
|         '4646B5181C6C3020DF1D9C7FCFEA.AD80ABF70C39BD369CCCAE780AFBB98FA6B6CB42766249D9488C288', |         '4646B5181C6C3020DF1D9C7FCFEA.AD80ABF70C39BD369CCCAE780AFBB98FA6B6CB42766249D9488C288', | ||||||
|         '82C8849D94266724DC6B6AF89BBFA087EACCD963.B93C07FBA084ACAEFCF7C9D1FD0203C6C1815B6B' |         '82C8849D94266724DC6B6AF89BBFA087EACCD963.B93C07FBA084ACAEFCF7C9D1FD0203C6C1815B6B' | ||||||
|  |     ), | ||||||
|  |     ( | ||||||
|  |         'https://s.ytimg.com/yts/jsbin/html5player-en_US-vflKjOTVq/html5player.js', | ||||||
|  |         'js', | ||||||
|  |         '312AA52209E3623129A412D56A40F11CB0AF14AE.3EE09501CB14E3BCDC3B2AE808BF3F1D14E7FBF12', | ||||||
|  |         '112AA5220913623229A412D56A40F11CB0AF14AE.3EE0950FCB14EEBCDC3B2AE808BF331D14E7FBF3', | ||||||
|     ) |     ) | ||||||
| ] | ] | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,13 +30,10 @@ class JSInterpreter(object): | |||||||
|     def __init__(self, code, objects=None): |     def __init__(self, code, objects=None): | ||||||
|         if objects is None: |         if objects is None: | ||||||
|             objects = {} |             objects = {} | ||||||
|         self.code = self._remove_comments(code) |         self.code = code | ||||||
|         self._functions = {} |         self._functions = {} | ||||||
|         self._objects = objects |         self._objects = objects | ||||||
|  |  | ||||||
|     def _remove_comments(self, code): |  | ||||||
|         return re.sub(r'(?s)/\*.*?\*/', '', code) |  | ||||||
|  |  | ||||||
|     def interpret_statement(self, stmt, local_vars, allow_recursion=100): |     def interpret_statement(self, stmt, local_vars, allow_recursion=100): | ||||||
|         if allow_recursion < 0: |         if allow_recursion < 0: | ||||||
|             raise ExtractorError('Recursion limit reached') |             raise ExtractorError('Recursion limit reached') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister