Files
ElyOffice/tasks/reviews/C06.3-r3.md
T

10 lines
2.7 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/recovery.rs:107 — [P1] 加密容量预检遗漏第 143 行新增的 1 字节光标存在标志,上轮容量缺陷仍可导致全部恢复点丢失。隔离实测:容量设为 40 字节,先写入 `old!`,再写入 `12345678`,第二点实际占 41 字节;清理删除两点,`write_once` 却返回 `Ok(Some(path))`,`last_ok` 更新到第二次时间,`points()` 为空。现有 76 项测试全部通过,新增容量边界断言失败。修复方向:统一按完整序列化结果核算容量,提交前拒绝超限点并保留旧点,确认新点仍存在后更新成功状态;补加密容量边界回归。
crates/ely-files/src/recovery.rs:436 — [P1] 密钥创建仍使用会覆盖已有凭据的 `set_secret`,随后重读无法消除上轮初始化竞态。通过 keyring 可注入凭据后端与屏障复验:两个调用先同时读到 `NoEntry`,A 写入并重读返回后,B 再写入并重读;两次均成功,返回密钥不同,持久凭据只保留 B 的密钥。A 生成的恢复点使用持久密钥重开时返回 `InvalidData`。macOS 后端明确采用覆盖已有项的语义;拒绝读取时覆盖旧密钥的分支已修复。修复方向:对跨进程初始化采用排他创建或锁内重查,保证成功返回的密钥持续有效;补上述交错顺序与跨实例解密回归。
crates/ely-files/src/task.rs:69 — [P1] `RecoveryTask::drop` 只记录日志,后台线程被分离后继续持有恢复状态和快照闭包,能够撤销用户的显式放弃。隔离实测:首点写入后暂停下一次快照,销毁任务句柄,再对同一目录调用 `Recovery::discard()`;此时标记存在、恢复列表为空。释放快照后,遗留线程重新生成恢复点并清除 `.discarded`,实测得到 `discarded_marker=false`、`points_after_discard=1`,违反 §6.2。修复方向:任务销毁时可靠取消并结束工作线程,正在生成快照的任务在提交前复查取消状态,保证销毁完成后再无写入;补销毁、显式放弃和延迟快照的回归。
crates/ely-files/src/task.rs:57 — [P2] `last_ok()` 与整次同步写入、清理共用同一互斥锁;后台 I/O 阻塞期间,调用方也无法取得上一份成功恢复时间,违反 §6.2 对大文件未完成时显示该时间的要求。临时副本仅在 `save_atomic` 注入 800 毫秒 I/O 延迟,已有成功恢复点时查询 `last_ok()` 仍阻塞约 817 毫秒,直到新写入完成才返回;真实慢盘或挂起写入会同样阻塞状态查询线程。修复方向:让已完成状态的读取独立于进行中的磁盘 I/O,写入完成后发布新状态;补延迟写入期间可立即读取旧成功时间的回归。