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

为缓冲区分配足够的空间

13.2 ID_insufficientBuffer
目录 › next › previous

为缓冲区分配足够的空间,避免溢出等问题。

示例:

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
    ....
}

相关

ID_bufferOverflow

参考

CWE-131 CWE-135
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.