☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

sizeof 不应作用于数组参数

10.7.1 ID_sizeof_arrayParameter
目录 › next › previous

被声明为数组的形式参数等同于指针,对其使用 sizeof 无法获取到数组大小,往往意味着错误。

示例:

void fun(char a[10]) {
    memset(a, 0, sizeof(a));   // Non-compliant
}

例中参数 a 是一个指针,sizeof(a) 等同于 sizeof(char*),而不是 sizeof(char[10])。

在 C++ 代码中,如果有必要将参数设为数组,可以使用引用的方式,如:

void fun(char (&a)[10]) {
    memset(a, 0, sizeof(a));   // Compliant
}

这样 sizeof(a) 便等同于 sizeof(char[10])。

更好的方法是用安全性更高的 std::array 等容器代替 C 数组,如:

void fun(array<char, 10>& a) {
    a.fill(0);                   // Safe and brief
}

相关

ID_invalidParamArraySize ID_forbidCArray

依据

ISO/IEC 9899:1999 6.7.5.3(7) ISO/IEC 9899:2011 6.7.6.3(7) ISO/IEC 14882:2003 13.1(3) ISO/IEC 14882:2011 13.1(3)

参考

CWE-467 SEI CERT ARR01-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.