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

18 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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` 只保存标签,当前代码直接接受后来变化的区域。修复方向:确认时绑定标记快照及文档版本,返回后核对其有效性,范围变化时重新预览确认,并测试路径选择期间的标记变化与排队编辑。