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

3.0 KiB

FAIL

apps/ely-pdf/src/viewer.rs:276 — R1 的多加密文件缺陷仍存在于取消路径:密码框的关闭回调已经借用窗口,give_up 同步调用 next_locked,再由 ask_password:232 重入 window.update;创建下一密码框失败后只记日志,已弹出队列的文档失去完成与取消入口。复现:真窗口用启动参数打开两个 AES-256 PDF,在第一个密码框按 Esc;第二个密码框没有出现,日志为 pdf: no window for the password: window not found。隔离探针在窗口更新内调用 give_up,得到 dialog=None,预期为第二个 Doc;现有队列测试从窗口更新之外取消,遗漏实际事件路径。修复方向:利用当前窗口创建下一密码框,或延后到窗口借用释放后处理队列;创建成功后再移除待授权项,失败时显式处理该文档,并覆盖真实取消事件。

apps/ely-pdf/src/pages.rs:105 — R1 的当前页回退仅在连续模式修复;双页模式绘制仍把同一行的左页写为 current,覆盖跳转或切换模式时保留的右页,违反 PDF-01 与 C11.1 的当前页保持约定。复现:三页 PDF 在连续模式进入第 2 页,再切换双页模式,真窗口状态栏回到第 1 页;PageDown 跳到右页后又被绘制改回左页,重复翻页停在第一组。隔离探针设置双页并 show(1,0),实际绘制后 current=0,预期为 1;现有跳转回归只覆盖连续模式。修复方向:双页布局按当前阅读页和目标页维护 current,滚动判定同时处理一行内的两页,覆盖右页跳转、连续翻页与模式切换后的绘制帧。

apps/ely-pdf/src/pages.rs:118 — R1 的屏外图块修复只裁掉纵向屏外部分;每个可见页仍按完整页宽请求全部 tx,并把它们都加入 seen,横向屏外图块持续占用渲染与缓存,违反 C11.1“只留屏上的块”的约定。复现:Letter 页以 Zoom::Scale(4.0) 显示,2 倍设备比例的隔离窗口中,可见范围在页内右端为 3808 设备像素,缓存仍包含 tx=8 和 tx=9(起点分别为 4096、4608),横向滚动后屏外列同样保留;真实 worker 与实际 page_view 路径的可见性断言失败。修复方向:用视口的横纵范围和两轴滚动偏移计算可见图块集合,按该集合请求与淘汰,并覆盖放大后的横向滚动。

apps/ely-pdf/src/layout.rs:55 — 零页文档被 read_pages/add_tab 接受并显示“第 1 页,共 0 页”,单页布局随后构造页号 0 并在第 65 行越界,导致整个应用退出。复现:打开页树为 /Count 0 /Kids [] 的 PDF,真实 worker 成功返回 0 页;在真窗口选择“视图 → 单页”,主线程报 index out of bounds: the len is 0 but the index is 0,进程以 134 退出。隔离应用探针同样失败,现有坏文件测试只覆盖打开即失败的输入。修复方向:读取阶段校验可阅读页数,向用户报告零页错误并关闭已打开的 Doc;布局处理空页集合,增加内核接受该文件后的应用回归。