Files
ElyOffice/tasks/reviews/C07.1-r1.md
T

22 lines
5.0 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-lok/Cargo.toml:17 — Windows 工作进程编译失败。实跑 `cargo check -p ely-lok --all-targets --locked --target x86_64-pc-windows-msvc`,`ffi.rs:283/314` 因缺少 `Win32_System_LibraryLoader` feature 报 E0432;`worker.rs:161/170` 无条件调用仅在 Unix 依赖中声明的 `libc::_exit`,报 E0433。补齐动态加载 feature,并为进程退出提供正确的 Windows 实现,再运行该目标检查。
crates/ely-lok/src/client.rs:32 — 所有平台都开启 `unipoll`,但 `worker.rs:117` 的非 macOS 分支直接读取 IPC,从未调用 `Lok::run_loop()`,内核主循环初始化缺失。Linux x86_64 隔离容器中,原代码构建成功;使用可用的 LibreOffice 7.4.7 内核核验启动模式,同一二进制在 `SAL_LOK_OPTIONS=unipoll` 下返回版本后加载 FODT 以 139 退出,清空该选项后加载成功并以 0 退出。锁定的 26.2 源码也在 unipoll 分支只调用 `InitVCL()`,将 `soffice_main()` 留给 `runLoop`。按平台接通内核循环,或在非 macOS 同步服务分支使用内核线程模式,并添加 Linux 文档加载回归测试。
crates/ely-lok/src/client.rs:48 — 启动握手仅记录版本,任何返回版本的内核都被接受,固定构建要求没有落实到加载边界。实测官方未打补丁的 26.2.6.3 dmg 被 `Worker::spawn` 接受;该构建与补丁版拥有相同 BuildId,却缺少本任务要求的 macOS 图块绘制能力。Linux 探针中的 7.4.7 也通过握手。加载前校验随应用发行的构建身份及补丁产物,握手核对完整版本;增加错误版本和未打补丁构建的拒绝测试。
crates/ely-lok/src/worker.rs:161 — 正常 SHUTDOWN 直接 `_exit(0)`,跳过文档注册表和内核清理;EOF 路径的 `quit` 同样直接退出。真实补丁内核打开 FODT 后调用 `Worker::shutdown()`,退出码为 0,但源文件旁的 `.~lock.source.fodt#`、profile 的 `.lock` 和隔离 TMPDIR 内的 `lu*.tmp` 仍存在;预先 `close_doc` 后仍留下内核临时目录。违反 LOK-10。关闭时先释放全部文档,再完成内核及其拥有的临时资源清理,覆盖显式 shutdown、Drop 和管道 EOF,并断言锁及临时文件恢复基线。
crates/ely-lok/src/client.rs:95 — `shutdown()` 丢弃发送与应答错误,并把任意已退出状态都返回为 `Ok(())`。注入能完成版本握手、收到 SHUTDOWN 后以 23 退出的工作进程,实测结果为 `shutdown=Ok(())`;上述真实 Linux 加载崩溃后也返回成功。校验应答和 `ExitStatus::success()`,将异常退出、协议错误及等待失败传给调用方,并覆盖这些失败路径。
crates/ely-lok/src/client.rs:56 — 字符串应答的解码与工作进程编码不匹配。服务端使用 `Pack::str` 写入四字节长度,客户端在此处和 `:78` 将整个 payload 转成文本。真实 BuildId 返回值以 `�\0\0\0` 开头,缺失文档的错误文本以 `N\0\0\0Unsupported URL` 开头,破坏版本解析及错误展示。使用 `Unpack::str` 解码版本和错误应答,并添加精确文本与无效载荷断言;现有 `contains(PINNED_BUILD)` 掩盖了该问题。
crates/ely-lok/src/worker.rs:227 — profile URL 由未经绝对化的路径直接拼接,隔离目录可能被静默忽略。实测以 `../real-profile` 调用 `Worker::spawn` 返回成功,但指定目录始终为空;同一内核使用该目录的绝对路径时创建了 `user/`。前者被编码为 `file://../real-profile`,无法代表调用方创建的本地目录,违反 LOK-01。创建目录后规范化为绝对路径,再按平台正确构造文件 URL;增加相对路径测试,核对实际配置落点。
crates/ely-lok/src/client.rs:140 — 显式指定的工作进程路径失效时,会静默改用 sibling 或源码目录中的 debug 二进制。实测设置 `ELY_LOK_WORKER=/no/such/ely-lok-worker`,`Worker::spawn` 仍成功运行开发构建,配置错误被隐藏,也可能运行过期协议实现。环境变量已设置时严格校验并返回对应错误;只在变量缺省时执行默认定位,并测试不存在路径和空值。
crates/ely-lok/src/client/tests.rs:93 — 宏测试无法证明 LOK-11:fixture 中的 `Sneaky` 是空过程,没有自动执行事件绑定;测试只检查文档尺寸和关闭结果。临时将工作进程加载选项改成 `EnableMacrosExecution=true,MacroSecurityLevel=0` 后,`a_macro_document_loads_without_running_anything` 仍通过。使用带真实自动执行绑定、能在隔离目录写入标记的宏样本,断言标记缺失;通过允许执行的对照验证样本确实能触发,并要求放开宏的变异使安全测试失败。
patches/libreoffice/0001-lok-macos-tile-painting.patch:28 — 新增注释 `Aqua virtual devices cannot paint into a client buffer: paint, then copy.` 共 12 个英文词,违反 agents.md 的十词上限。`tests/scripts/comments.py` 当前未扫描补丁,现有检查仍报告通过。将该新增注释缩至十词以内,并让注释检查覆盖项目维护补丁的新增注释。