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

5.0 KiB
Raw Blame History

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 当前未扫描补丁,现有检查仍报告通过。将该新增注释缩至十词以内,并让注释检查覆盖项目维护补丁的新增注释。