From 3c3e7afbb9249804284ce9747b5953d91fafce32 Mon Sep 17 00:00:00 2001 From: Zef Hemel Date: Sun, 3 May 2026 07:57:00 +0200 Subject: [PATCH] Fixes #1067 --- server/disk_space_primitives.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/server/disk_space_primitives.go b/server/disk_space_primitives.go index 097b51e7..5d3de57b 100644 --- a/server/disk_space_primitives.go +++ b/server/disk_space_primitives.go @@ -295,13 +295,19 @@ func (d *DiskSpacePrimitives) DeleteFile(path string) error { return nil } -// cleanOrphaned removes empty parent directories up to rootPath +// cleanOrphaned removes empty parent directories up to rootPath. Symlinks are +// left alone: os.Remove on a symlink to a directory deletes the symlink itself +// regardless of whether the target directory is empty, which would silently +// remove links to non-empty content from the space. func (d *DiskSpacePrimitives) cleanOrphaned(deletedFilePath string) { current := filepath.Dir(deletedFilePath) for strings.HasPrefix(current, d.rootPath) && current != d.rootPath { - err := os.Remove(current) - if err != nil { + info, err := os.Lstat(current) + if err != nil || info.Mode()&os.ModeSymlink != 0 { + break + } + if err := os.Remove(current); err != nil { // Directory not empty or other error, stop cleaning break }