Skip to content

[code-review] 7 个 IM panel 复发 #1370:create 输入多余字段静默截断 secret 并持久化,start 失败无 RemoveIMAdapter 回滚 #2797

Description

@topcheer

文件和行号

独立复核(grep len(fields) < 全族扫描)确认,#1370-B/C 修复只落在 feishu/matrix/mattermost/slack/tg/wecom,以下 7 个 panel 缺失双重修复:

  • internal/tui/dingtalk_panel.go:315 — 仅 len(fields) < 3,无 >3 拒绝;无回滚
  • internal/tui/discord_panel.go:316 — 仅 < 2,无 >2 拒绝;无回滚
  • internal/tui/qq_panel.go:358 — 仅 <3
  • internal/tui/irc_panel.go:279 — 仅 <4
  • internal/tui/signal_panel.go:437 — 仅 <3
  • internal/tui/twitch_panel.go:279 — 仅 <4
  • internal/tui/nostr_panel.go:299 — 仅 <1(多词场景弱,低优先)

问题描述(复现 #1370 两类缺陷)

#1370-C 类(静默截断):create 面板用 strings.Fields 按空白切分,多余 token 静默丢弃。粘贴两行 token / secret 带尾随词时,被截断的 secret 持久化为必然失败的凭据。
#1370-B 类(失败不回滚):next() 中 startXXXAdapterIfNeeded 失败直接返回错误,无 feishu 的 rollback 闭包(configMutationMsg → RemoveIMAdapter → saveConfig)。明文坏 secret 永久落盘 + 占用 adapter 名(重试同名报 already exists,面板无删除键)。

触发场景(dingtalk 为例)

面板按 i,输入 mybot dingxxxxx secret-word1 word2(粘贴时混入第二个词)→ fields[3] 被丢弃 → AddIMAdapter 持久化截断 secret → StartNamedAdapter 鉴权失败 → 坏凭据留盘,重试同名报 IM adapter "mybot" already exists。

预期行为 vs 实际行为

  • 预期:与 feishu 一意——多余字段报错拒绝;start 失败经 Update loop 回滚删除
  • 实际:静默截断 + 持久化 + 无补偿

修复建议

在各 create cmd 补 len(fields) > N 拒绝(错误信息照抄 feishu #1370-C 形态),next() 失败分支照抄 feishu_panel.go L352-374 的 rollback 闭包。

严重程度

medium(有 "e" 编辑键事后兜底,与 #1370 修复时判定的严重度一致)

独立复核证据

subagent 确认真实 bug 非误报:(a) 逐文件核实当前代码;(b) 全族 grep 扫描定位 7 处缺失;(c) 缓解因素(编辑键、换名重试)存在但 #1370 判例已认定不足以替代回滚。

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