Skip to content

MCPP_HOME 含空格时工具链 hook 以未引用路径 exec 失败;release 二进制内嵌 CI 构建路径(strip 后残留) #832

Open

Description

@Sunrisepeak

环境

  • mcpp v2026.10.21.1 官方 release 载荷 mcpp-2026.10.21.1-linux-x86_64.tar.gz
  • Linux x86_64(macOS 上同样现象)

问题 1:MCPP_HOME 含空格时工具链 hook 以未加引号路径调用 shell,直接失败

复现(最小步骤):

export MCPP_HOME="/tmp/mc probe/home"   # 路径含空格
mcpp build                               # 任意需要准备工具链的构建

结果(exit 2):

[xim:xpkg]: Rewriting gcc specs to payload-direct paths via gcc-specs-config...
sh: 1: /tmp/mc: not found
  full log: <MCPP_HOME>/registry/logs/hooks/xim-gcc@16.1.0.config.log

带 registry 依赖时错误信息直接暴露了机制——工具链 config hook 把多个未引用路径整串拼接后 exec:

error: auto-installing default toolchain gcc@16.1.0 failed: ... config hook failed:
[string "..."]:26: exec failed after 1 attempt(s):
/tmp/mc probe/home/registry/subos/default/bin/gcc-specs-config /tmp/mc probe/home/registry/data/xpkgs/xim-x-gcc/16.1.0/bin/gcc --dynamic-linker /tmp/mc probe/home/.../ld-linux-x86-64.so.2 --rpath /tmp/mc probe/home/...:/tmp/mc probe/home/...

空格把路径截断成 /tmp/mc;sh: 1: /tmp/mc: not found 与上面的 exec 行互为印证。另外 mcpp self init 在 home 已存在时的提示也把未加引号的路径拼进建议命令:

error: a home is already initialized at '...'; use `mcpp self init --force --home /tmp/mc probe/home` to select '/tmp/mc probe/home'

照抄这条命令同样会被空格截断。同一操作在不含空格的 MCPP_HOME 下正常。

影响:home 无法放在任何含空格路径(Windows "Program Files" 类安装目录、便携分发、含空格/中文用户目录)。中文路径同理。

期望:子进程/hook 调用统一走 argv 数组(不经 sh -c 拼接),或对所有路径参数做正确引用;错误提示中的路径加引号。

问题 2:release 二进制内嵌 CI 构建机绝对路径(strip 后仍残留)

bin/mcpp 为静态链接且已 strip,但 .rodata 中仍有断言宏 __FILE__ 带来的 CI 绝对路径:

$ strings -a bin/mcpp | grep -E '^/home/runner' | sort -u
/home/runner/work/mcpp/mcpp/modules/libs/src/json/json.hpp

断言/诊断消息会把 CI 机器路径打印给最终用户;下游再分发(如编辑器按 SHA-256 固定引用官方载荷随包分发)的隐私/供应链扫描会因此拒绝发布。

建议:release 构建加入 -ffile-prefix-map(或相对路径编译),使 __FILE__ 不含绝对构建路径。

背景

meditor(https://github.com/speak-agent/meditor ,GPL-3.0-only,专注 mcpp 与 C++ Modules 的编辑器)通过 MCPP_HOME/self init --home 管理随包工具宿主并按 SHA-256 固定引用官方载荷。下游先用打包期处理临时解决,不阻塞等修复;希望上游根治后直接升级 pin。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions