mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[YoutubeDL] format spec: add additional checks for invalid syntax
This commit is contained in:
		| @@ -302,6 +302,16 @@ class TestFormatSelection(unittest.TestCase): | |||||||
|             downloaded = ydl.downloaded_info_dicts[0] |             downloaded = ydl.downloaded_info_dicts[0] | ||||||
|             self.assertEqual(downloaded['format_id'], f1['format_id']) |             self.assertEqual(downloaded['format_id'], f1['format_id']) | ||||||
|  |  | ||||||
|  |     def test_invalid_format_specs(self): | ||||||
|  |         def assert_syntax_error(format_spec): | ||||||
|  |             ydl = YDL({'format': format_spec}) | ||||||
|  |             info_dict = _make_result([{'format_id': 'foo', 'url': TEST_URL}]) | ||||||
|  |             self.assertRaises(SyntaxError, ydl.process_ie_result, info_dict) | ||||||
|  |  | ||||||
|  |         assert_syntax_error('bestvideo,,best') | ||||||
|  |         assert_syntax_error('+bestaudio') | ||||||
|  |         assert_syntax_error('bestvideo+') | ||||||
|  |  | ||||||
|     def test_format_filtering(self): |     def test_format_filtering(self): | ||||||
|         formats = [ |         formats = [ | ||||||
|             {'format_id': 'A', 'filesize': 500, 'width': 1000}, |             {'format_id': 'A', 'filesize': 500, 'width': 1000}, | ||||||
|   | |||||||
| @@ -953,6 +953,8 @@ class YoutubeDL(object): | |||||||
|                         tokens.restore_last_token() |                         tokens.restore_last_token() | ||||||
|                         break |                         break | ||||||
|                     elif string == ',': |                     elif string == ',': | ||||||
|  |                         if not current_selector: | ||||||
|  |                             raise syntax_error('"," must follow a format selector', start) | ||||||
|                         selectors.append(current_selector) |                         selectors.append(current_selector) | ||||||
|                         current_selector = None |                         current_selector = None | ||||||
|                     elif string == '/': |                     elif string == '/': | ||||||
| @@ -972,6 +974,8 @@ class YoutubeDL(object): | |||||||
|                     elif string == '+': |                     elif string == '+': | ||||||
|                         video_selector = current_selector |                         video_selector = current_selector | ||||||
|                         audio_selector = _parse_format_selection(tokens, inside_merge=True) |                         audio_selector = _parse_format_selection(tokens, inside_merge=True) | ||||||
|  |                         if not video_selector or not audio_selector: | ||||||
|  |                             raise syntax_error('"+" must be between two format selectors', start) | ||||||
|                         current_selector = FormatSelector(MERGE, (video_selector, audio_selector), []) |                         current_selector = FormatSelector(MERGE, (video_selector, audio_selector), []) | ||||||
|                     else: |                     else: | ||||||
|                         raise syntax_error('Operator not recognized: "{0}"'.format(string), start) |                         raise syntax_error('Operator not recognized: "{0}"'.format(string), start) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz