Skip to content

[Bug] 1.9.5beta3 合并配置时丢失单行 proxies 列表,导致节点 not found #1348

Description

@RokiLai

Verify steps

  • 已搜索 Issue Tracker;检索了 clash_modify.sh 和“单行”,未找到相同问题。
  • 在公测版 1.9.5beta3 中实测存在。
  • 已查看常见问题中的订阅导入和配置相关说明,未找到此格式兼容问题的直接解决办法。

Description

ShellCrash 在拆分订阅配置时会丢失写在 proxies: 同一行上的节点列表。该 flow-style 写法是合法 YAML;将相同内容转换为 block-style 多行格式后,现有合并流程及 Mihomo 校验可以通过。

环境与官方文件确认

  • 小米路由器 / BusyBox ash,Linux arm64。
  • ShellCrash:1.9.5beta3,更新源 master。
  • 内核:Mihomo Meta v1.19.17。
  • 路由器 starts/clash_modify.sh 与官方 master ShellCrash.tar.gz 内同名文件逐字节一致(13,838 bytes)。
  • SHA-256:44a9dc3bde3f46b37bdd16858488a4b6470dd7e92f97c068bb4d720ab3c155f3。
  • 检查时 master HEAD:eb0c211c176323815f67aa088d8152d6038cab21。

最小复现

以下是依据实际订阅返回结构构造的合成样例,域名及密码均为无效测试值,不包含真实订阅地址或认证信息。

proxies: [{name: demo-node, type: ss, server: example.invalid, port: 443, cipher: aes-128-gcm, password: dummy-not-a-real-secret}]
proxy-groups:
  - name: demo-select
    type: select
    proxies: [demo-node]
rules:
  - MATCH,demo-select

将其保存为 input.yaml,运行 split_and_customize_yaml_parts() 使用的提取命令:

sed -n '/^proxies:/,/^[a-z]/ { /^[a-z]/d; p; }' input.yaml

实际验证:YAML 解析器读取到一个节点,而上述命令退出码为 0,输出为 0 字节。原因是 /^[a-z]/d 删除了同时包含键和全部节点内容的 proxies: [...] 行。

实际现象及因果链

  1. 真实订阅下载成功,原始响应中包含节点及相应策略组引用。
  2. 用现有 ShellCrash 配置合并函数生成候选运行配置,节点列表被漏掉,策略组引用仍保留。
  3. Mihomo -t -d <工作目录> -f <候选配置> 报节点 not found,校验失败。
  4. 将同一份订阅用 YAML 解析器转换为多行格式,再调用相同合并函数,校验通过。
  5. 经 PUT /configs 热加载返回 HTTP 204,内核 PID 未变,代理访问 generate_204 返回 HTTP 204。

本次校验失败期间未将候选配置加载到运行内核。这里验证的是原合并函数及实际内核校验链,并未声称通过菜单完成了整个更新操作。

期望与建议

支持合法的 flow-style proxies: [...],保留节点及本地覆写;或在拆分前可靠规范化 YAML。建议至少覆盖 flow-style/block-style 等价输入,以及合并后节点缺失时拒绝替换旧配置的回归场景。

目前只对订阅副本做了格式转换来绕过,未修改 ShellCrash 官方脚本;后续订阅再次返回单行格式时仍可能复现。

Activity

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions