mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 22:37:07 -05: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