mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-06-26 09:49:26 +08:00
trim remaining comments; keep only the security-relevant one
This commit is contained in:
parent
0a2b9f8864
commit
273314a690
@ -207,14 +207,8 @@ def download_release_asset_zip(release: Release, destination_path: str) -> None:
|
|||||||
class FrontendManager:
|
class FrontendManager:
|
||||||
CUSTOM_FRONTENDS_ROOT = str(Path(__file__).parents[1] / "web_custom_versions")
|
CUSTOM_FRONTENDS_ROOT = str(Path(__file__).parents[1] / "web_custom_versions")
|
||||||
|
|
||||||
# Specifiers that resolve to a moving target. Downloads made via these are
|
|
||||||
# tracked so old copies can be pruned; explicit pins (@1.46.0, @v1.46.0)
|
|
||||||
# are left alone.
|
|
||||||
AUTO_MANAGED_VERSION_SPECIFIERS = ("latest", "prerelease")
|
AUTO_MANAGED_VERSION_SPECIFIERS = ("latest", "prerelease")
|
||||||
AUTO_MANAGED_METADATA_FILENAME = ".auto_managed.json"
|
AUTO_MANAGED_METADATA_FILENAME = ".auto_managed.json"
|
||||||
|
|
||||||
# Allowlist for version directory names. Prevents a tampered metadata
|
|
||||||
# file from steering cleanup at paths like "../etc".
|
|
||||||
_VERSION_DIRNAME_PATTERN = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]*$")
|
_VERSION_DIRNAME_PATTERN = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]*$")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -235,8 +229,6 @@ class FrontendManager:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _read_auto_managed_versions(cls, repo_owner: str, repo_name: str) -> list[str]:
|
def _read_auto_managed_versions(cls, repo_owner: str, repo_name: str) -> list[str]:
|
||||||
"""Versions tracked as auto-managed for this provider. Any error or
|
|
||||||
malformed content yields an empty list."""
|
|
||||||
metadata_path = cls._auto_managed_metadata_path(repo_owner, repo_name)
|
metadata_path = cls._auto_managed_metadata_path(repo_owner, repo_name)
|
||||||
if not metadata_path.exists():
|
if not metadata_path.exists():
|
||||||
return []
|
return []
|
||||||
@ -269,7 +261,6 @@ class FrontendManager:
|
|||||||
metadata_path.parent.mkdir(parents=True, exist_ok=True)
|
metadata_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
safe_versions = [v for v in versions if cls._is_safe_version_dirname(v)]
|
safe_versions = [v for v in versions if cls._is_safe_version_dirname(v)]
|
||||||
payload = {"auto_managed": sorted(set(safe_versions))}
|
payload = {"auto_managed": sorted(set(safe_versions))}
|
||||||
# Atomic write: tmp + rename so a crash can't leave a half-written file.
|
|
||||||
tmp_path = metadata_path.with_suffix(metadata_path.suffix + ".tmp")
|
tmp_path = metadata_path.with_suffix(metadata_path.suffix + ".tmp")
|
||||||
try:
|
try:
|
||||||
with open(tmp_path, "w", encoding="utf-8") as fh:
|
with open(tmp_path, "w", encoding="utf-8") as fh:
|
||||||
@ -291,8 +282,6 @@ class FrontendManager:
|
|||||||
def _prune_auto_managed_versions(
|
def _prune_auto_managed_versions(
|
||||||
cls, repo_owner: str, repo_name: str, keep_version: str
|
cls, repo_owner: str, repo_name: str, keep_version: str
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Remove tracked auto-managed folders other than ``keep_version``
|
|
||||||
and rewrite the metadata to list only it."""
|
|
||||||
tracked = cls._read_auto_managed_versions(repo_owner, repo_name)
|
tracked = cls._read_auto_managed_versions(repo_owner, repo_name)
|
||||||
if not tracked and keep_version is None:
|
if not tracked and keep_version is None:
|
||||||
return
|
return
|
||||||
@ -311,8 +300,8 @@ class FrontendManager:
|
|||||||
for stale_version in tracked:
|
for stale_version in tracked:
|
||||||
if stale_version == keep_version:
|
if stale_version == keep_version:
|
||||||
continue
|
continue
|
||||||
# Defense in depth: read already filters, but re-check here so
|
# Re-check even though read already filters: keeps rmtree provably
|
||||||
# the rmtree target is provably under the provider dir.
|
# bounded under provider_dir regardless of caller.
|
||||||
if not cls._is_safe_version_dirname(stale_version):
|
if not cls._is_safe_version_dirname(stale_version):
|
||||||
logging.warning(
|
logging.warning(
|
||||||
"Refusing to clean up suspicious frontend version name: %r",
|
"Refusing to clean up suspicious frontend version name: %r",
|
||||||
@ -361,8 +350,6 @@ class FrontendManager:
|
|||||||
def _untrack_auto_managed_version(
|
def _untrack_auto_managed_version(
|
||||||
cls, repo_owner: str, repo_name: str, version: str
|
cls, repo_owner: str, repo_name: str, version: str
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Drop ``version`` from auto-managed tracking without touching its
|
|
||||||
folder, so a subsequent explicit pin survives later @latest cleanups."""
|
|
||||||
tracked = cls._read_auto_managed_versions(repo_owner, repo_name)
|
tracked = cls._read_auto_managed_versions(repo_owner, repo_name)
|
||||||
if version not in tracked:
|
if version not in tracked:
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user