mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[jsinterp] Fix escape in regex
This commit is contained in:
		@@ -352,6 +352,11 @@ class TestJSInterpreter(unittest.TestCase):
 | 
			
		||||
        ''')
 | 
			
		||||
        self.assertEqual(jsi.call_function('x').flags & re.I, re.I)
 | 
			
		||||
 | 
			
		||||
        jsi = JSInterpreter('''
 | 
			
		||||
        function x() { let a=/,][}",],()}(\[)/; return a; }
 | 
			
		||||
        ''')
 | 
			
		||||
        self.assertEqual(jsi.call_function('x').pattern, r',][}",],()}(\[)')
 | 
			
		||||
 | 
			
		||||
    def test_char_code_at(self):
 | 
			
		||||
        jsi = JSInterpreter('function x(i){return "test".charCodeAt(i)}')
 | 
			
		||||
        self.assertEqual(jsi.call_function('x', 0), 116)
 | 
			
		||||
 
 | 
			
		||||
@@ -122,6 +122,10 @@ _NSIG_TESTS = [
 | 
			
		||||
        'https://www.youtube.com/s/player/113ca41c/player_ias.vflset/en_US/base.js',
 | 
			
		||||
        'cgYl-tlYkhjT7A', 'hI7BBr2zUgcmMg',
 | 
			
		||||
    ),
 | 
			
		||||
    (
 | 
			
		||||
        'https://www.youtube.com/s/player/c57c113c/player_ias.vflset/en_US/base.js',
 | 
			
		||||
        'M92UUMHa8PdvPd3wyM', '3hPqLJsiNZx7yA',
 | 
			
		||||
    ),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2702,7 +2702,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
 | 
			
		||||
    def _extract_n_function_code(self, video_id, player_url):
 | 
			
		||||
        player_id = self._extract_player_info(player_url)
 | 
			
		||||
        func_code = self.cache.load('youtube-nsig', player_id, min_ver='2022.08.19.2')
 | 
			
		||||
        func_code = self.cache.load('youtube-nsig', player_id, min_ver='2022.09.1')
 | 
			
		||||
        jscode = func_code or self._load_player(video_id, player_url)
 | 
			
		||||
        jsi = JSInterpreter(jscode)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -245,11 +245,12 @@ class JSInterpreter:
 | 
			
		||||
                counters[_MATCHING_PARENS[char]] += 1
 | 
			
		||||
            elif not in_quote and char in counters:
 | 
			
		||||
                counters[char] -= 1
 | 
			
		||||
            elif not escaping and char in _QUOTES and in_quote in (char, None):
 | 
			
		||||
                if in_quote or after_op or char != '/':
 | 
			
		||||
                    in_quote = None if in_quote and not in_regex_char_group else char
 | 
			
		||||
            elif in_quote == '/' and char in '[]':
 | 
			
		||||
                in_regex_char_group = char == '['
 | 
			
		||||
            elif not escaping:
 | 
			
		||||
                if char in _QUOTES and in_quote in (char, None):
 | 
			
		||||
                    if in_quote or after_op or char != '/':
 | 
			
		||||
                        in_quote = None if in_quote and not in_regex_char_group else char
 | 
			
		||||
                elif in_quote == '/' and char in '[]':
 | 
			
		||||
                    in_regex_char_group = 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)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user