From 12355b785920f668e3a405c9cb1d864c0562e7cc Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 18 Jun 2026 10:10:51 +0800 Subject: [PATCH] fix(tasks): skip symlinks during image disk cache cleanup --- src/tasks/image_cache_cleanup.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/tasks/image_cache_cleanup.rs b/src/tasks/image_cache_cleanup.rs index 9ae8a98..15813c1 100644 --- a/src/tasks/image_cache_cleanup.rs +++ b/src/tasks/image_cache_cleanup.rs @@ -113,6 +113,8 @@ pub async fn cleanup_image_cache_at( } /// 递归收集目录下的所有常规文件,返回路径、大小与修改时间。 +/// +/// 跳过符号链接,避免 traversal 到 `uploads/.cache/` 外部。 async fn collect_files( base: &Path, entries: &mut Vec<(PathBuf, u64, SystemTime)>, @@ -121,11 +123,14 @@ async fn collect_files( while let Some(dir) = stack.pop() { let mut reader = tokio::fs::read_dir(&dir).await?; while let Some(entry) = reader.next_entry().await? { - let metadata = entry.metadata().await?; - if metadata.is_file() { + let file_type = entry.file_type().await?; + if file_type.is_symlink() { + continue; + } else if file_type.is_file() { + let metadata = entry.metadata().await?; let mtime = metadata.modified()?; entries.push((entry.path(), metadata.len(), mtime)); - } else if metadata.is_dir() { + } else if file_type.is_dir() { stack.push(entry.path()); } }