为缓冲区分配足够的空间
13.2 ID_insufficientBuffer
为缓冲区分配足够的空间,避免溢出等问题。
示例:
void foo(const char* s) {
char* p = (char*)malloc(strlen(s)); // Non-compliant, should be ‘strlen(s) + 1’
strcpy(p, s);
printf("%s\n", p); // Out of bounds, undefined behavior
}
字符串以空字符结尾,在分配字符串空间时不可漏掉空字符的空间。
又如:
void bar() {
int* p = (int*)malloc(123); // Non-compliant
....
}
例中 bar 函数为 int 型数组分配了 123 个字节的空间,而 123 不能被 sizeof(int) 整除,最后一个元素会越界。虽然 malloc 函数返回已对齐的地址,但这种代码往往意味着 sizeof 因子的缺失。
应改为:
void bar() {
int* p = (int*)malloc(123 * sizeof(int)); // Compliant
....
}