diff --git a/radicale/pathutils.py b/radicale/pathutils.py index 488dbfc0..b1ddce00 100644 --- a/radicale/pathutils.py +++ b/radicale/pathutils.py @@ -282,14 +282,11 @@ def path_to_filesystem(root: str, sane_path: str) -> str: for part in parts: if not is_safe_filesystem_path_component(part): raise UnsafePathError(part) - safe_path_parent = safe_path safe_path = os.path.join(safe_path, part) # Check for conflicting files (e.g. case-insensitive file systems # or short names on Windows file systems) - if os.path.lexists(safe_path): - with os.scandir(safe_path_parent) as entries: - if part not in (e.name for e in entries): - raise CollidingPathError(part) + if (os.path.lexists(safe_path) and not os.path.realpath(safe_path).endswith(part)): + raise CollidingPathError(part) return safe_path