mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[core] Disallow unsafe extensions (CVE-2024-38519)
Ref: https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-79w7-vh3h-8g4j Authored by: Grub4K
This commit is contained in:
		| @@ -130,6 +130,7 @@ from yt_dlp.utils import ( | ||||
|     xpath_text, | ||||
|     xpath_with_ns, | ||||
| ) | ||||
| from yt_dlp.utils._utils import _UnsafeExtensionError | ||||
| from yt_dlp.utils.networking import ( | ||||
|     HTTPHeaderDict, | ||||
|     escape_rfc3986, | ||||
| @@ -281,6 +282,13 @@ class TestUtil(unittest.TestCase): | ||||
|         finally: | ||||
|             os.environ['HOME'] = old_home or '' | ||||
| 
 | ||||
|     _uncommon_extensions = [ | ||||
|         ('exe', 'abc.exe.ext'), | ||||
|         ('de', 'abc.de.ext'), | ||||
|         ('../.mp4', None), | ||||
|         ('..\\.mp4', None), | ||||
|     ] | ||||
| 
 | ||||
|     def test_prepend_extension(self): | ||||
|         self.assertEqual(prepend_extension('abc.ext', 'temp'), 'abc.temp.ext') | ||||
|         self.assertEqual(prepend_extension('abc.ext', 'temp', 'ext'), 'abc.temp.ext') | ||||
| @@ -289,6 +297,19 @@ class TestUtil(unittest.TestCase): | ||||
|         self.assertEqual(prepend_extension('.abc', 'temp'), '.abc.temp') | ||||
|         self.assertEqual(prepend_extension('.abc.ext', 'temp'), '.abc.temp.ext') | ||||
| 
 | ||||
|         # Test uncommon extensions | ||||
|         self.assertEqual(prepend_extension('abc.ext', 'bin'), 'abc.bin.ext') | ||||
|         for ext, result in self._uncommon_extensions: | ||||
|             with self.assertRaises(_UnsafeExtensionError): | ||||
|                 prepend_extension('abc', ext) | ||||
|             if result: | ||||
|                 self.assertEqual(prepend_extension('abc.ext', ext, 'ext'), result) | ||||
|             else: | ||||
|                 with self.assertRaises(_UnsafeExtensionError): | ||||
|                     prepend_extension('abc.ext', ext, 'ext') | ||||
|             with self.assertRaises(_UnsafeExtensionError): | ||||
|                 prepend_extension('abc.unexpected_ext', ext, 'ext') | ||||
| 
 | ||||
|     def test_replace_extension(self): | ||||
|         self.assertEqual(replace_extension('abc.ext', 'temp'), 'abc.temp') | ||||
|         self.assertEqual(replace_extension('abc.ext', 'temp', 'ext'), 'abc.temp') | ||||
| @@ -297,6 +318,16 @@ class TestUtil(unittest.TestCase): | ||||
|         self.assertEqual(replace_extension('.abc', 'temp'), '.abc.temp') | ||||
|         self.assertEqual(replace_extension('.abc.ext', 'temp'), '.abc.temp') | ||||
| 
 | ||||
|         # Test uncommon extensions | ||||
|         self.assertEqual(replace_extension('abc.ext', 'bin'), 'abc.unknown_video') | ||||
|         for ext, _ in self._uncommon_extensions: | ||||
|             with self.assertRaises(_UnsafeExtensionError): | ||||
|                 replace_extension('abc', ext) | ||||
|             with self.assertRaises(_UnsafeExtensionError): | ||||
|                 replace_extension('abc.ext', ext, 'ext') | ||||
|             with self.assertRaises(_UnsafeExtensionError): | ||||
|                 replace_extension('abc.unexpected_ext', ext, 'ext') | ||||
| 
 | ||||
|     def test_subtitles_filename(self): | ||||
|         self.assertEqual(subtitles_filename('abc.ext', 'en', 'vtt'), 'abc.en.vtt') | ||||
|         self.assertEqual(subtitles_filename('abc.ext', 'en', 'vtt', 'ext'), 'abc.en.vtt') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Simon Sawicki
					Simon Sawicki