18 lines
5.3 KiB
Markdown
18 lines
5.3 KiB
Markdown
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` 只保存标签,当前代码直接接受后来变化的区域。修复方向:确认时绑定标记快照及文档版本,返回后核对其有效性,范围变化时重新预览确认,并测试路径选择期间的标记变化与排队编辑。
|