CodeQL 文档

对负值的冗余检查

ID: go/negative-length-check
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - correctness
Query suites:
   - go-security-and-quality.qls

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

内置的 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]
}

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私