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

1.8 KiB

FAIL

crates/ely-files/src/key.rs:71 — [P1] 取得初始化锁后直接调用 init,缺少锁内重读,上轮密钥覆盖竞态仍成立。隔离后端实测:B 首次读取已取得 None 后暂停,A 完成初始化并返回,随后 B 继续、取得已释放的锁并覆盖凭据;两次调用均成功且密钥不同,A 的恢复点用最终持久密钥恢复时返回 InvalidData。原有 81 项测试全部通过,受控交错回归失败。修复方向:在取得排他锁后重新读取凭据,仅在锁内确认缺失时生成密钥,并覆盖该交错顺序与跨实例解密回归。

crates/ely-files/src/key.rs:76 — [P1] 等待初始化超过 1 秒即删除锁,仍在运行的持有者会失去排他保护。隔离实测:让 A 的凭据写入暂停超过 1 秒,B 删除 A 的锁、写入并成功返回密钥;恢复 A 后,A 再次覆盖凭据并成功返回另一密钥,B 已生成的恢复点随即无法解密。系统凭据解锁或慢响应可触发同一顺序;取得锁后重读也无法修复这个场景。修复方向:采用随持有进程退出而释放的系统锁,存活持有者等待超时应返回明确错误;分别传播凭据读取与锁检查错误,补慢初始化并发回归。

crates/ely-files/src/task.rs:27 — [P2] 独立状态锁初始化为 None,丢失传入 Recovery 已有的成功时间。隔离实测:先成功 write_once,再以 10 秒间隔启动同一对象的后台任务,立即调用 task.last_ok() 得到 None;该状态持续到下一次写入尝试结束,大文件写入阻塞时也无法显示已有成功时间,违反 §6.2。修复方向:启动时用传入对象的 last_ok() 初始化发布状态,并补首次后台写入尚未完成时保留已有成功时间的回归。