fix(ui): 审计修复 — 路径规范化/SkillInfo类型/分页offset/初始加载/显示统一
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
- workspace.rs: canonicalize() 解析 '..' 和符号链接 - Workspace.tsx: 组件挂载时调用 loadDirStats + 统一 KB 显示 - configStore: SkillInfo 接口补充 category 字段 + 空数组回退注释 - securityStore: localStorage 审计日志添加 offset 分页支持
This commit is contained in:
@@ -13,20 +13,23 @@ pub struct DirStats {
|
||||
#[tauri::command]
|
||||
pub async fn workspace_dir_stats(path: String) -> Result<DirStats, String> {
|
||||
let dir = Path::new(&path);
|
||||
if !dir.exists() {
|
||||
|
||||
// Canonicalize to resolve '..' components and symlinks
|
||||
let canonical = dir.canonicalize().unwrap_or_else(|_| dir.to_path_buf());
|
||||
if !canonical.exists() {
|
||||
return Ok(DirStats {
|
||||
file_count: 0,
|
||||
total_size: 0,
|
||||
});
|
||||
}
|
||||
if !dir.is_dir() {
|
||||
if !canonical.is_dir() {
|
||||
return Err(format!("{} is not a directory", path));
|
||||
}
|
||||
|
||||
let mut file_count: u64 = 0;
|
||||
let mut total_size: u64 = 0;
|
||||
|
||||
let entries = std::fs::read_dir(dir).map_err(|e| format!("Failed to read dir: {}", e))?;
|
||||
let entries = std::fs::read_dir(&canonical).map_err(|e| format!("Failed to read dir: {}", e))?;
|
||||
for entry in entries.flatten() {
|
||||
if let Ok(metadata) = entry.metadata() {
|
||||
if metadata.is_file() {
|
||||
|
||||
Reference in New Issue
Block a user