2.7 KiB
FAIL
crates/ely-pdf-engine/shim/ely_sign.c:309;crates/ely-pdf-engine/src/bin/ely-pdf-worker/sign.rs:106 — 另存为成功后,验证列表读取新文件,后续签名却仍从含原签名的内存文档生成快照,违反 PDF-12、QA-15。复现:打开含 Signature1 的已签 PDF,另存为 copy.pdf;独立读取 copy.pdf 确认该字段为空。随后在新位置用证书签名,输出竟同时含 Signature1 和 Signature2,前者报告 Intact、later=true;对 copy.pdf 已清空的原字段签名则报 field 7 is signed already。应用探针实际走 write_as、write_signed,输出 signed_fields=[("Signature1", Some((Intact, true))), ("Signature2", Some((Intact, false)))];原字段探针输出 disk_empty=true, current_memory_signed=1。修复方向:在保存提交成功后,让后续签名使用与当前文件一致的快照和字段状态,保留保存失败及撤销重做的正确语义;增加另存为后原字段重签、新字段签名的回归。证据:/tmp/ely-c117-r3-probes.log。
apps/ely-pdf/src/sign.rs:50 — 验证结果只按路径缓存,文件字节变化后再次打开签名对话框持续使用旧摘要结果,违反 PDF-12、QA-15。复现:核验已签 PDF 得到 Intact,关闭对话框;外部程序在同一路径把正文 Hello 的首字节改为 J,再打开签名对话框。应用仍显示签名后未改动,独立 worker 重开同一文件已报告 Changed。应用探针输出 displayed=Intact, disk=Changed,一致性断言失败。修复方向:将缓存绑定实际文件版本,使文件变化后的重新打开触发核验;增加同路径文件被修改后的验证回归。证据:/tmp/ely-c117-r3-probes.log。
crates/ely-pdf-engine/shim/ely_pages.c:424;crates/ely-pdf-engine/src/bin/ely-pdf-worker/main.rs:304 — 快照写入失败后 MuPDF 的操作与历史状态未恢复,后续真实编辑返回原历史标记,撤销失效。复现:打开已签 PDF,在标签工作目录创建名为 save.pdf.raw 的目录,执行另存为使内核导出失败;移除该目录后旋转页面。应用页面尺寸已变为 792×612,视图却为 mark=0, saved=0, modified=false。独立 worker 对不存在的父目录 SAVE 失败后也复现:旋转返回 Ok("0"),随后保存成功,撤销报 nothing to undo;对照组旋转返回 Ok("1") 且撤销成功。原签名保留的上一轮修复已通过,此失败路径仍破坏后续编辑与撤销契约。修复方向:确保快照异常退出时恢复 MuPDF operation/journal 状态,让后续编辑独立进入历史;增加导出失败后继续编辑、保存、撤销的回归。证据:/tmp/ely-c117-r3-probes.log、/tmp/ely-c117-r3-worker-probes.log。