14 lines
3.3 KiB
Markdown
14 lines
3.3 KiB
Markdown
FAIL
|
||
|
||
crates/ely-files/src/save.rs:253 — [P1] 新增的统一保存入口始终调用 `save_atomic`,跳过 `atomic_capable` 和 `save_with_backup`,违反 §6.1 对非本地目标保留上一份文件并提示限制的要求。隔离验证中,通过 macOS `statfs` 拦截清除 `MNT_LOCAL`,确认 `atomic_capable(target)` 返回 false;随后调用 `save`,结果仍为成功、会话进入 Saved,目录仅留下新内容的目标文件,旧版本已消失。修复方向:在统一保存流程内探测目标能力,为受限目标执行保留旧版本的保存路径,并向调用者返回限制与备份信息;覆盖能力为 false 的分支。
|
||
|
||
crates/ely-files/src/save.rs:73 — [P1] 上轮权限保留问题仍存在:`COPYFILE_ACL` 被写成 `1 << 2`,macOS 系统头文件中该值实际为 `COPYFILE_XATTR`,ACL 的值是 `1 << 0`。实测给 0644 文档添加 `user:nobody deny read` ACL,调用 `save_atomic` 返回成功后,该 ACL 条目消失,文件访问限制被放宽。现有测试仅核对 mode 位。修复方向:使用正确的 ACL 标志并传播复制失败,增加保存前后 ACL 一致的回归测试。
|
||
|
||
crates/ely-files/src/save.rs:133 — [P1] 新备份按默认创建权限落盘,遗漏源文件的访问限制。实测在 `/private/tmp` 下的 0755 目录创建 0600 文档,在 umask 022 下执行 `save_with_backup`,得到的备份权限为 0644,其他本机用户因此可以读取原本受保护的文档内容。修复方向:排他创建备份时先限制访问,在复制内容前应用源文件适用的权限和 ACL,任何失败均传播;增加共享目录中的私有文件备份回归测试。
|
||
|
||
crates/ely-files/src/save.rs:63 — [P1] 保存通过符号链接加载的文档时,`persist(path)` 替换链接本身,使会话与实际加载的文件分离。实测创建 `alias.md -> report.md`,通过 `Session::load(alias.md)` 加载并编辑,再执行 `save`;函数成功且状态为 Saved,`alias.md` 已变为普通文件,`report.md` 仍为旧内容。后续从原文件路径打开时看不到已保存的编辑。修复方向:将保存目标解析到实际加载文件,在该目标目录暂存并替换,保留链接关系,同时让外部修改检查针对同一目标;补充经文件符号链接保存的回归测试。
|
||
|
||
crates/ely-files/src/save.rs:126 — [P2] 备份名称只有 100 个候选,而每次成功保存都会永久占用一个,导致正常重复保存达到固定上限后持续失败。实测对同一 `report.md` 连续调用 `save_with_backup`,前 100 次成功,第 101 次返回 AlreadyExists / `no free backup name`;目录仍可写且有可用空间。修复方向:使用能够持续生成排他备份名称的策略,保持已有文件保护,并增加超过 100 次连续保存的回归测试。
|
||
|
||
crates/ely-files/src/save.rs:30 — [P2] 上轮附件长文件名问题仍有遗漏:长度预算只截断 stem,suffix 超过 NAME_MAX 时仍被完整追加。实测源文件名为 `a.` 加 253 个 `x`,共 255 字节;首次导入成功,第二次生成 `-1.` 加 253 个 `x`,共 256 字节,返回 InvalidFilename / File name too long。修复方向:对完整候选名统一分配长度预算,覆盖扩展名本身接近上限的情况,并增加长扩展名重复导入测试。
|