相同值的比较¶
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
比较两个相同的表达式通常表示存在错误,例如缺少限定符或变量名称拼写错误。
建议¶
仔细检查比较以确定它是否是错误的征兆。
示例¶
在下面的示例中,方法 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
}