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) | ||||
|  | ||||
|     def test_comments(self): | ||||
|         'Skipping: Not yet fully implemented' | ||||
|         return | ||||
|         jsi = JSInterpreter(''' | ||||
|         function x() { | ||||
|             var x = /* 1 + */ 2; | ||||
| @@ -80,6 +82,15 @@ class TestJSInterpreter(unittest.TestCase): | ||||
|         ''') | ||||
|         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): | ||||
|         jsi = JSInterpreter(''' | ||||
|         function x() { | ||||
|   | ||||
| @@ -64,6 +64,12 @@ _TESTS = [ | ||||
|         'js', | ||||
|         '4646B5181C6C3020DF1D9C7FCFEA.AD80ABF70C39BD369CCCAE780AFBB98FA6B6CB42766249D9488C288', | ||||
|         '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): | ||||
|         if objects is None: | ||||
|             objects = {} | ||||
|         self.code = self._remove_comments(code) | ||||
|         self.code = code | ||||
|         self._functions = {} | ||||
|         self._objects = objects | ||||
|  | ||||
|     def _remove_comments(self, code): | ||||
|         return re.sub(r'(?s)/\*.*?\*/', '', code) | ||||
|  | ||||
|     def interpret_statement(self, stmt, local_vars, allow_recursion=100): | ||||
|         if allow_recursion < 0: | ||||
|             raise ExtractorError('Recursion limit reached') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister