2.1 KiB
FAIL
crates/ely-pdf-engine/src/bin/ely-pdf-worker/main.rs:305;crates/ely-office/src/save.rs:111 — 保存尚未提交到目标文件就清除打开文档的签名,失败会破坏当前验证对象,违反 PDF-12、QA-15。复现:打开已签 PDF,另存为到一个名为 directory.pdf 的现有目录;worker 导出成功,外壳写入目标失败,标签仍指向原文件且 risk=Signed,内存签名数却由 1 变为 0,独立重开原文件仍为 1。直接向不存在的父目录发 SAVE 同样报错并清除签名。应用探针输出 path=.../signed.pdf, risk=Some(Signed), memory_signed=0,保留原签名的断言失败。修复方向:将打开文档的去签名状态与最终目标文件成功提交绑定,导出或原子写入失败时保留原文档、签名和撤销历史;增加两阶段失败回归。证据:/tmp/ely-c117-r2-logs/app-probes.log、probes.log;副本中仅将去签名移到 worker 写出成功之后,直接 SAVE 失败探针恢复正确状态,外壳提交仍需共同处理。
crates/ely-pdf-engine/shim/ely_sign.c:421;crates/ely-pdf-engine/src/bin/ely-pdf-worker/main.rs:76 — 去签名作为一个可撤销的保存步骤加入 journal,撤销会恢复原签名,重做到编辑步骤就提前返回,使已保存副本的验证列表再次读取原文件签名,违反 PDF-12、QA-15。复现:打开已签 PDF,旋转页面,另存为 copy.pdf,撤销,再重做;磁盘副本签名数为 0,应用列表却含原签名并报告摘要完整,标签已回到保存点。应用探针输出 displayed_signed=true, disk_signed=0, dirty=false,当前文件与验证对象一致性的断言失败;worker 独立探针也在撤销、重做后读到签名数 1。修复方向:让签名状态在保存后的撤销、重做期间持续对应当前文件及实际文档修订,避免保存步骤重新引入已经移除的签名;增加保存后完整撤销、重做循环的验证回归。证据:/tmp/ely-c117-r2-logs/app-probes.log、probes.log。上一轮新增的保存回归与本轮原有测试均通过,两个失败路径由本轮独立探针复现。