CodeQL 文档

移位超出范围

ID: go/shift-out-of-range
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - correctness
   - external/cwe/cwe-197
Query suites:
   - go-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

将整数值移位的位数超过其类型中的位数时,负值的右移始终会导致 -1,而其他移位会导致 0。因此,此类移位表达式要么是冗余的,要么表示逻辑错误。

建议

检查长度检查,以查看它是冗余的可以删除,还是需要修复的错误。

示例

以下代码段尝试计算值 240 (1099511627776)。但是,由于左操作数 base 的类型为 int32(32 位),因此移位操作会溢出,从而产生零。

package main

func shift(base int32) int32 {
	return base << 40
}

var x1 = shift(1)

为了防止出现这种情况,应将 base 的类型更改为 int64

package main

func shiftGood(base int64) int64 {
	return base << 40
}

var x2 = shiftGood(1)

参考

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