From e47691215f75fe7e9684080d17fadf340c9a8450 Mon Sep 17 00:00:00 2001 From: bashonly <88596187+bashonly@users.noreply.github.com> Date: Wed, 10 Jun 2026 18:00:05 -0500 Subject: [PATCH] Fix `allow-unsafe-ext` compat option (#16920) Fix bug in e578e265f7c6ca94a74b30e0d8d6196a4d19fb6a Closes #16919 Authored by: bashonly --- test/test_utils.py | 12 ++++++++++++ yt_dlp/__init__.py | 2 +- yt_dlp/utils/_utils.py | 5 +++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/test/test_utils.py b/test/test_utils.py index 180ede6240..cd0fb0f2e9 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -327,6 +327,12 @@ class TestUtil(unittest.TestCase): with self.assertRaises(_UnsafeExtensionError): prepend_extension('abc.unexpected_ext', ext, 'ext') + # Test allow-unsafe-ext compat option + _UnsafeExtensionError._enabled = False + self.assertEqual(prepend_extension('abc.ext', 'un/safe'), 'abc.un/safe.ext') + # Re-enable sanitization for other tests + _UnsafeExtensionError._enabled = True + def test_replace_extension(self): self.assertEqual(replace_extension('abc.ext', 'temp'), 'abc.temp') self.assertEqual(replace_extension('abc.ext', 'temp', 'ext'), 'abc.temp') @@ -345,6 +351,12 @@ class TestUtil(unittest.TestCase): with self.assertRaises(_UnsafeExtensionError): replace_extension('abc.unexpected_ext', ext, 'ext') + # Test allow-unsafe-ext compat option + _UnsafeExtensionError._enabled = False + self.assertEqual(replace_extension('abc.ext', 'bin'), 'abc.bin') + # Re-enable sanitization for other tests + _UnsafeExtensionError._enabled = True + 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') diff --git a/yt_dlp/__init__.py b/yt_dlp/__init__.py index 18cf4c8d2c..ec3d52755d 100644 --- a/yt_dlp/__init__.py +++ b/yt_dlp/__init__.py @@ -619,7 +619,7 @@ def validate_options(opts): warnings.append( 'Using allow-unsafe-ext opens you up to potential attacks. ' 'Use with great care!') - _UnsafeExtensionError.sanitize_extension = lambda x, prepend=False: x + _UnsafeExtensionError._enabled = False return warnings, deprecation_warnings diff --git a/yt_dlp/utils/_utils.py b/yt_dlp/utils/_utils.py index 56847961ef..43ee53729e 100644 --- a/yt_dlp/utils/_utils.py +++ b/yt_dlp/utils/_utils.py @@ -5218,12 +5218,17 @@ class _UnsafeExtensionError(Exception): 'sbv', ]) + _enabled = True + def __init__(self, extension, /): super().__init__(f'unsafe file extension: {extension!r}') self.extension = extension @classmethod def sanitize_extension(cls, extension, /, *, prepend=False, _allowed_exts=()): + if not cls._enabled: + return extension + if extension is None: return None