Files
ElyOffice/tasks/reviews/C11.3-r2.md
T

2.5 KiB
Raw Blame History

FAIL

apps/ely-pdf/src/writes.rs:103、:112;apps/ely-pdf/src/editing.rs:34:文字预览只记录标签、页号和文字,确认时缺少文档版本及目标身份核验,结构编辑后仍可改写其他页。复现:打开两页均有 “Hello world / Second line” 的 PDF,在第一页改用 Times 写 “Hi world / Second line”,打开预览;经原生“删除页面”菜单删除第一页,预览继续显示;确认后,原第二页的文字被替换。expected 只比对文字,同文页面通过检查。违反 §11.1 的统一选择与状态规则及 §11.3 的预览确认契约。真实窗口另以 18pt→72pt 复验:删除原页后旧预览仍在 AX 树,确认、保存并用独立 worker 重开,剩余一页字号为 72pt。修复方向:预览绑定发起文档修订和页面/块身份,编辑请求使其失效,确认及实际执行前核验目标与队列状态。证据:/tmp/ely-c113-r2/apps/ely-pdf/src/tests/editing.rs 的 review_r2_preview_is_bound_to_document_version 失败;副本加入版本失效处理后通过,恢复原代码后再次失败;日志 /tmp/ely-c113-r2-preview.log、/tmp/ely-c113-r2-repair.log、/tmp/ely-c113-r2-restored.log;原生证据 /tmp/ely-c113-r2-native-stale-ax.log、/tmp/ely-c113-r2-native-saved.log。

apps/ely-pdf/src/writes.rs:172:图片选择器的版本守卫只检查已落地版本,允许在已有编辑进行中或排队时追加使用旧页号/对象序号的操作。复现:页面依次有表单 XObject、图片 A、图片 B;选 A 发起替换,在删除表单的操作落地之前返回方形图片。version 仍相同,替换排到删除之后;删除使 B 占据原序号 1,真实 worker 随后替换 B,A 保留。可控调度探针暂停编辑队列直到选择器回调完成,再交真实 worker 顺序执行;B 的框由 [400,100,500,150] 变成 [425,100,475,150],A 的框保持 [72,242,172,292]。同一守卫也用于添加图片,排队的页面组织操作可改变原页号含义。违反 PDF-04 和 §11.1 的目标选择规则。修复方向:选择器绑定包含待落地编辑的修订,回调和执行时核验发起页/对象身份;已有编辑进行中或排队时让旧选择器请求失效。证据:/tmp/ely-c113-r2/apps/ely-pdf/src/tests/editing.rs 的 review_r2_picker_rejects_pending_edit 失败;副本守卫加入 settled() 检查后通过,恢复原代码后再次失败;日志 /tmp/ely-c113-r2-pending.log、/tmp/ely-c113-r2-repair.log、/tmp/ely-c113-r2-restored.log。