Files
ElyOffice/tasks/reviews/C08.1-r3.md
T

2.1 KiB
Raw Blame History

FAIL

crates/ely-lok/src/view/input.rs:238、crates/ely-lok/src/view/input.rs:266、apps/ely-doc/src/docs.rs:47:输入请求完成就清除 edit_pending,修改状态经另一条事件轮询到达,两者之间丢失关闭保护。复现:新建空白文档,等待初始 ModifiedStatus=false,提交 JustLanded,仅等待 view.settled;此时 Session=Saved、缓存 ModifiedStatus=false、edit_pending=false,实际内核导出的 FODT 已包含 JustLanded。立即 request_close 会移除标签并跳过未保存询问,违反 FILE-01、FILE-08。修复方向:输入完成与其权威修改状态确认保持一致,在确认前保留关闭保护;回归覆盖输入已应用、状态回调尚未到达的顺序,同时保留 Cmd+A 的干净状态。

crates/ely-files/src/session.rs:322:save_failed 把 ReadOnly 改为 SaveFailed,而保存守卫仅通过当前状态识别只读,失败处理因此解除写入保护。复现:对内容为 ORIGINAL 的文件建立 Session::read_only,调用 save_failed,再调用 ely_files::save 写入 OVERWRITTEN;保存成功,原文件实际变为 OVERWRITTEN。应用 report 会对 Refused 错误调用这个新方法。修复方向:保存失败处理保留会话访问权限和加载生命周期守卫,验证只读会话在失败与重试后持续拒绝写入。

apps/ely-doc/src/files.rs:73:原始字节中的固定 XML 前缀仍被当作宏结构,第 2 轮第 4 项的误判问题部分存在,同时遗漏合法命名空间别名。复现一:打开正文含 <ooo:library-embedded ooo:name="Standard"> 的 xml-example.txt,实际 LOK 加载成功,risk=true,普通 Save 被导向 DOCX/ODT 转换,破坏 §8.1 原格式保存。复现二:将真实宏 FODT 的库元素及属性改用绑定同一命名空间的 basic 前缀,LOK 加载与往返导出仍保留 library-embedded,应用 risk=false,遗漏 §8.3 风险状态。修复方向:按输入格式解析实际 XML 元素,以命名空间 URI 和元素名识别嵌入库;普通 TXT 保留普通保存语义,并覆盖正文标签字符串与合法前缀别名。