fix: breaking change between yt-dlp 2026.03.17 -> 2026.06.09 due to CVE related to exec
This commit is contained in:
parent
c7fbe6b484
commit
4f5ac8d8a0
2 changed files with 13 additions and 4 deletions
|
|
@ -349,6 +349,14 @@ class TestYTDLP:
|
||||||
assert len(result) == 8
|
assert len(result) == 8
|
||||||
assert result.isalnum()
|
assert result.isalnum()
|
||||||
|
|
||||||
|
def test_exec_init(self) -> None:
|
||||||
|
YTDLP(
|
||||||
|
params={
|
||||||
|
"compat_opts": set(),
|
||||||
|
"postprocessors": [{"key": "Exec", "exec_cmd": "echo %(title)q"}],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
def test_outtmpl_reuses_value(self) -> None:
|
def test_outtmpl_reuses_value(self) -> None:
|
||||||
ytdlp = YTDLP(params={"outtmpl": {"default": "%(title)s"}})
|
ytdlp = YTDLP(params={"outtmpl": {"default": "%(title)s"}})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,9 @@ class YTDLP(yt_dlp.YoutubeDL):
|
||||||
except Exception:
|
except Exception:
|
||||||
patched_params = params
|
patched_params = params
|
||||||
|
|
||||||
|
self._ytptube_outtmpl_info: dict[str, Any] | None = None
|
||||||
|
self._ytptube_outtmpl_cache: dict[str, Any] = {}
|
||||||
|
|
||||||
super().__init__(params=patched_params, auto_init=auto_init)
|
super().__init__(params=patched_params, auto_init=auto_init)
|
||||||
|
|
||||||
# Restore param and replace upstream archive set with our proxy
|
# Restore param and replace upstream archive set with our proxy
|
||||||
|
|
@ -90,8 +93,6 @@ class YTDLP(yt_dlp.YoutubeDL):
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self._ytptube_outtmpl_info: dict[str, Any] | None = None
|
|
||||||
self._ytptube_outtmpl_cache: dict[str, Any] = {}
|
|
||||||
self.archive = _ArchiveProxy(orig_file)
|
self.archive = _ArchiveProxy(orig_file)
|
||||||
|
|
||||||
def _delete_downloaded_files(self, *args, **kwargs) -> None:
|
def _delete_downloaded_files(self, *args, **kwargs) -> None:
|
||||||
|
|
@ -105,14 +106,14 @@ class YTDLP(yt_dlp.YoutubeDL):
|
||||||
self._ytptube_outtmpl_info = None
|
self._ytptube_outtmpl_info = None
|
||||||
self._ytptube_outtmpl_cache = {}
|
self._ytptube_outtmpl_cache = {}
|
||||||
|
|
||||||
def prepare_outtmpl(self, outtmpl, info_dict, sanitize=False):
|
def prepare_outtmpl(self, outtmpl, info_dict, sanitize=False, *, _exec=False):
|
||||||
if self._ytptube_outtmpl_info is not info_dict:
|
if self._ytptube_outtmpl_info is not info_dict:
|
||||||
self._ytptube_outtmpl_info = info_dict
|
self._ytptube_outtmpl_info = info_dict
|
||||||
self._ytptube_outtmpl_cache = {}
|
self._ytptube_outtmpl_cache = {}
|
||||||
|
|
||||||
outtmpl, enriched = rewrite_outtmpl(outtmpl, info_dict, cache=self._ytptube_outtmpl_cache)
|
outtmpl, enriched = rewrite_outtmpl(outtmpl, info_dict, cache=self._ytptube_outtmpl_cache)
|
||||||
|
|
||||||
return super().prepare_outtmpl(outtmpl, enriched, sanitize=sanitize)
|
return super().prepare_outtmpl(outtmpl, enriched, sanitize=sanitize, _exec=_exec)
|
||||||
|
|
||||||
def process_info(self, info_dict):
|
def process_info(self, info_dict):
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue