已关闭
bug: SetFlagEnum 使用 panic 而非 error 返回导致 CLI 可崩溃 #415
aflyingto创建于  7月8日关闭于  8月7日
aflyingto成员
7月8日 创建

位置

pkg/cmdutil/flag_annotations.go:28

证据

func SetFlagEnum(cmd *cobra.Command, name string, values ...string) {
    if err := cmd.Flags().SetAnnotation(name, FlagEnumAnnotation, values); err != nil {
        panic(fmt.Sprintf("failed to annotate flag %q: %v", name, err))
    }
}

该函数在注册 flag 注解失败时直接调用 panic(),违反 spec/foundations/coding-standards.md 中"禁止裸 panic"的规范。

影响

  • Flag 注解失败(如重复注册)会导致整个 CLI 进程崩溃,而非返回可恢复的错误
  • cobra.Command.RunE 本身支持 error 返回语义,panic 绕过了这一错误处理机制

建议修复

将 SetFlagEnum 改为返回 error,由调用方在 NewCmd* 中决定如何处理(通常应在命令构造阶段尽早暴露问题)。

标签

  • type/bug
  • scope/cmdutil
  • risk/low
  • source/daily-audit
  • status/triage
likedislike
Aaflyingto成员
7月25日 关联了里程碑:M4: Critical Bug Fixes
Aaflyingto成员
8月7日 关联了pull request:fix(cmdutil): SetFlagEnum returns error, no panic + spec rule (#415)
Aaflyingto成员
8月7日 关闭了 issue