import re SAFE_MANIFEST_PATH = re.compile(r"^[A-Za-z0-9._/-]+$") MAX_MANIFEST_PATH_LENGTH = 512 def normalize_manifest_path(path: str) -> str: normalized = path.strip().removeprefix("./") if not normalized: raise ValueError("path must not be empty") if len(normalized) > MAX_MANIFEST_PATH_LENGTH: raise ValueError( f"path exceeds {MAX_MANIFEST_PATH_LENGTH} characters: {path!r}" ) if not SAFE_MANIFEST_PATH.match(normalized) or ".." in normalized.split("/"): raise ValueError(f"path is not allowed: {path!r}") return normalized