Files
ElyOffice/tasks/reviews/C11.7-r1.md
T

3.4 KiB
Raw Blame History

FAIL

crates/ely-pdf-engine/shim/ely_sign.c:210 — 签名验证列表只遍历页面的 Widget,遗漏 AcroForm 字段树里的不可视数字签名,违反 PDF-12、QA-15。复现:创建 /AcroForm /Fields 下含 /FT /Sig /V、无页面 Widget 的字段,以测试证书对正确 ByteRange 创建 detached PKCS #7 签名;OpenSSL 独立验证成功,worker 的 signed() 返回 1,signatures() 返回 []。真实窗口的提示条与状态栏显示已签名,打开 Signatures 后却显示 “No signature fields”。修复方向:按字段树枚举并校验数字签名,将页面与外观作为可选定位信息。证据:/tmp/ely-c117-review-logs/probes.log、native.log、native-signatures-ax.txt,并已人工核对窗口截图。

apps/ely-pdf/src/engine.rs:138;crates/ely-office/src/save.rs:265 — 已签文件另存为后,标签切换到已去签名的新文件,内存文档与签名验证结果仍来自原文件,违反 PDF-12、QA-15。复现:打开已签 PDF,读取签名列表,再通过 write_as() 另存为 copy.pdf;独立 worker 读回新文件得到 signed=0,当前标签已经指向新路径且 risk=None,签名列表仍含原来的有效签名。应用探针记录 disk_signed=0, displayed_signed=1, risk=None 并断言失败;清缓存后重新读取也会查询仍持有原签名的 worker 文档。修复方向:成功另存为时同步标签、引擎文档与签名状态,使验证对象和当前文件一致,并增加保存后重新读取签名的回归。证据:/tmp/ely-c117-review-logs/app-probes.log、probes.log。

apps/ely-pdf/src/sign.rs:292 — 后台签名成功回调通过 cancel_sign() 清除当前活动标签的 sign_at,操作归属随标签切换而改变。复现:标签 A 发起写出签名副本,完成前切到标签 B 并建立 B 的签名位置;A 完成后 B 的签名位置被清除,A 的位置继续保留,返回 A 会再次出现旧的签名表单。应用探针实际得到 (A=Some(at), B=None),预期为 (A=None, B=Some(at));副本中改为按发起标签及位置清理后,同一探针通过。修复方向:成功回调绑定发起时的标签、视图与签名位置,只关闭对应操作的表单。证据:/tmp/ely-c117-review-logs/app-probes.log、mutation-repair.log。

apps/ely-pdf/src/protect.rs:98 — 所有者密码认证成功后无条件清空 viewer.secure,会关闭后来打开的其他文档对话框。复现:在受限标签 A 提交正确所有者密码,等待期间取消旧对话框、切到同样受限的标签 B 并打开 B 的所有者密码框;A 的认证回包清空 B 的框,B 仍受限制。应用探针记录 A 权限为 127、newer_dialog_survives=false 并失败;副本中增加发起标签核对后,同一探针通过。修复方向:保留认证发起时的标签与输入框身份,只清理仍对应这次请求的对话框;权限更新继续归属 A。证据:/tmp/ely-c117-review-logs/app-probes.log、mutation-repair.log。

patches/mupdf/0004-signature-reason-and-location.patch:14 — 新增 C 注释含 13 个英文词,另在第 37 行新增 12 词注释,均超过 agents.md 的十词上限。按空白分词可直接复现;tests/scripts/comments.py 仍返回 PASS,因为它对 .patch 只匹配新增的 // 注释。修复方向:将这两条注释缩短到十词以内,并让现有检查覆盖补丁新增的 C 注释。