Files
ElyOffice/tasks/reviews/C06.2-r2.md
T

14 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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。修复方向:对完整候选名统一分配长度预算,覆盖扩展名本身接近上限的情况,并增加长扩展名重复导入测试。