对负值的冗余检查¶
ID: go/negative-length-check
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- correctness
Query suites:
- go-security-and-quality.qls
内置的 len
函数返回数组、切片或类似类型的长度,该长度永远不会小于零。因此,检查对 len
的调用结果是否为负数是多余的,或者表明存在逻辑错误。
这同样适用于内置函数 cap
和无符号整数值。
建议¶
检查长度检查,看看它是否是多余的可以删除,或者是否是应该修复的错误。
示例¶
下面的示例显示了一个函数,该函数返回数组的第一个元素,如果数组为空,则会触发 panic
package main
func getFirst(xs []int) int {
if len(xs) < 0 {
panic("No elements provided")
}
return xs[0]
}
但是,空检查无效:因为 len(xs)
永远不会小于零,所以该条件永远不会成立,也不会触发 panic。相反,索引表达式 xs[0]
会导致 panic。
检查应改写如下
package main
func getFirstGood(xs []int) int {
if len(xs) == 0 {
panic("No elements provided")
}
return xs[0]
}