5.3 KiB
FAIL
crates/ely-pdf-engine/shim/ely_redact.c:69 — 部分覆盖的矢量对象仍可从输出恢复,违反 PDF-09、§11.4、QA-14。复现:页面内容为 1 0 0 rg 100 700 200 40 re f,删除页面坐标 [90,45,180,100];worker 返回 text=0, light=0, versions=1,输出仍完整保存原矩形路径。独立探针移除新增的黑色填充后,在删除区域 [110,60,50,20] 恢复了 1000 个红色像素。REMOVE_IF_COVERED 只处理被完全覆盖的路径,当前检查接受了这次视觉遮盖。修复方向:对相交的矢量内容执行实质删除或重写,并检查输出对象及移除遮盖后的像素。本轮已自行执行 cargo build -p ely-pdf-engine --bins、cargo test -p ely-pdf-engine(57 个通过)、cargo test -p ely-pdf(88 个通过);该失败路径由额外探针检出,证据保留在 /tmp/c116-probes.log。
crates/ely-pdf-engine/shim/ely_redact.c:60 — 删除表单控件后保留含敏感值的空父字段,违反 PDF-09、QA-14。复现:/AcroForm/Fields 指向文本父字段,其 /V 为 SECRET-FIELD-VALUE,唯一子控件位于 PDF 矩形 [70,700,220,740];删除页面区域 [60,40,230,100]。包含默认字体资源和控件外观的样本同样返回全部检查通过,输出保留 <</FT/Tx/T(parent)/V(SECRET-FIELD-VALUE)/Kids[]>>。垃圾回收保留这个仍被 /Fields 引用的对象。修复方向:删除控件时清理失去全部控件的字段及空祖先,检查字段值残留,并补充父子字段的输出对象测试。
crates/ely-pdf-engine/shim/ely_redact.c:122 — 隐藏文字的扫描与清理遗漏关闭的可选内容组,违反 PDF-10。复现:/OCProperties/D/OFF 关闭一组,组内内容为 /OC /H BDC ... (SECRET-OFF-LAYER) Tj ... EMC,页面另有可识别的 3 Tr 隐藏文字,使界面可以勾选隐藏内容。清理后返回 hidden=0, scripts=0,普通文本提取只见可见文字,但输出内容流仍含 SECRET-OFF-LAYER;开启该组即可恢复。只有零透明度文字的样本也被扫描成 hidden=0,直接清理时保留原文字。修复方向:扫描覆盖可选内容状态及透明度,删除实际隐藏内容,并以独立对象检查验证清理结果。
crates/ely-pdf-engine/shim/ely_redact.c:234 — 元数据清理仅覆盖 trailer /Info 和 catalog /Metadata,页面元数据保留,违反 PDF-10。复现:catalog 和页面各引用一个带 /Type /Metadata /Subtype /XML 的有效 XMP 流,页面 XMP 标题含 SECRET-PAGE-METADATA。扫描显示 meta=1,勾选元数据后清理返回 meta=0,输出页面 /Metadata 及其敏感标题仍在。修复方向:将页面等实际承载元数据的对象纳入扫描、删除与输出核验,补充页面 XMP 残留测试。
crates/ely-pdf-engine/shim/ely_redact.c:245 — 清理附件或隐藏内容时对缺失的 /Names 调用字典删除,合法文件因此清理失败。复现:没有 catalog /Names 的普通 PDF 含 3 Tr 文字 SECRET-INVISIBLE;扫描正确报告 hidden=1,执行 Cleaning { hidden: true, ..Default::default() } 返回 not a dict (null),输出被删除。第 247 行的脚本删除触发同一问题;仅通过页面 FileAttachment 保存附件的文件也会经过第 245 行。修复方向:按可选名称字典的实际存在情况处理删除,继续处理页面内容,并分别测试没有 /Names 的隐藏文字与页面附件。
crates/ely-pdf-engine/shim/ely_redact.c:271 — 隐藏批注被排除出普通批注计数,同时遗漏于隐藏内容计数,清理界面无法选择它们。复现:文件只有一条 /Subtype /Text /F 2 /Contents (SECRET-HIDDEN-NOTE) 批注;扫描返回 annots=0, hidden=0, scripts=0。apps/ely-pdf/src/redact.rs:221 据此禁用批注和隐藏内容选项;实际直接执行隐藏内容清理能够删去这条批注,证明扫描范围与执行范围失配。修复方向:准确计入隐藏批注并用于界面的范围显示及输出核验,补充仅含隐藏批注的界面与 worker 测试。
apps/ely-pdf/src/redact.rs:87 — 清理扫描返回时直接打开原标签的对话框,缺少当前标签及文档版本核对。复现:在标题为 Plan 的 A 标签发起清理,扫描返回前切换到 B;真实应用源码的 GPUI 探针得到 asked=0, active=1, meta=1,B 的窗口弹出 A 的处理范围,随后保存操作仍清理 A。对话框也没有标明 A 的文件名,违反明确说明处理对象与范围的 UX-07、PDF-10。修复方向:回调核对发起标签、存活状态及版本,丢弃失效扫描,补充切换和关闭标签期间的扫描测试。证据在 /tmp/c116-ui-probes.log。
apps/ely-pdf/src/redact.rs:154 — 路径选择返回后才读取删除标记,执行范围可偏离先前预览与确认,违反 PDF-09。复现:标记并确认删除 Hello,进入 choose_output 的路径选择等待;期间将同一标签的标记换成 Second line,随后完成路径选择。GPUI 探针实际调用原应用的输出流程,生成文件保留 Hello world、删除 Second line。Removal 只保存标签,当前代码直接接受后来变化的区域。修复方向:确认时绑定标记快照及文档版本,返回后核对其有效性,范围变化时重新预览确认,并测试路径选择期间的标记变化与排队编辑。