CodeQL 文档

可疑的“sizeof”使用

ID: cpp/suspicious-sizeof
Kind: problem
Security severity: 8.8
Severity: warning
Precision: medium
Tags:
   - reliability
   - correctness
   - security
   - external/cwe/cwe-467
Query suites:
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

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

此规则查找对数组类型函数参数获取大小的表达式。在 C 中,数组类型函数参数被视为具有相应指针类型,因此它们的大小始终是指针类型的大小(通常是 4 或 8)。特别地,不能以这种方式确定作为参数传递的内存缓冲区的大小。如果开发人员打算获取数组的大小而不是指针的大小,则对指针类型使用 sizeof 运算符会导致意外结果。

建议

修改函数以接收一个额外的参数来指示缓冲区大小。

示例

void f(char s[]) {
	int size = sizeof(s); //wrong: s is now a char*, not an array. 
	                      //sizeof(s) will evaluate to sizeof(char *)
}

参考资料

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