CodeQL 文档

重复的“if”条件

ID: go/duplicate-condition
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - maintainability
   - correctness
   - external/cwe/cwe-561
Query suites:
   - go-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

如果“if”-“else if”链中的两个条件相同,则第二个条件将永远不成立。这很可能表明存在复制粘贴错误,其中第一个条件被复制,然后没有正确调整。

建议

检查这两个条件,找出它们要检查的内容。如果条件和依赖于它们的代码块都相同,则第二个代码块是重复的代码,可以删除。否则,需要调整第二个条件。

示例

在下面的示例中,函数 controller 检查其参数 msg 以确定它要执行的操作。但是,“else if”中的比较与“if”中的比较相同,因此永远不会执行此分支。

package main

func controller(msg string) {
	if msg == "start" {
		start()
	} else if msg == "start" {
		stop()
	} else {
		panic("Message not understood.")
	}
}

最有可能的是,“else if”分支应该将 msg"stop" 进行比较

package main

func controllerGood(msg string) {
	if msg == "start" {
		start()
	} else if msg == "stop" {
		stop()
	} else {
		panic("Message not understood.")
	}
}

参考资料

  • ©GitHub 公司
  • 条款
  • 隐私