CodeQL 文档

相同值的比较

ID: go/comparison-of-identical-expressions
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - correctness
   - external/cwe/cwe-570
   - external/cwe/cwe-571
Query suites:
   - go-security-and-quality.qls

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

比较两个相同的表达式通常表示存在错误,例如缺少限定符或变量名称拼写错误。

建议

仔细检查比较以确定它是否是错误的征兆。

示例

在下面的示例中,方法 Rectangle.contains 旨在检查点 (x, y) 是否位于由其原点 (r.x, r.y)、宽度 r.width 和高度 r.height 给出的矩形 r 内。

package main

type Rectangle struct {
	x, y, width, height float64
}

func (r *Rectangle) containsBad(x, y float64) bool {
	return r.x <= x &&
		y <= y &&
		x <= r.x+r.width &&
		y <= r.y+r.height
}

但是,请注意,在第 9 行,程序员忘记限定 r.y,因此最终将参数 y 与自身进行了比较。应相应地修复比较

package main

func (r *Rectangle) containsGood(x, y float64) bool {
	return r.x <= x &&
		r.y <= y &&
		x <= r.x+r.width &&
		y <= r.y+r.height
}
  • ©GitHub 公司
  • 条款
  • 隐私