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

判断资源分配函数的返回值是否有效

2.25 ID_nullDerefAllocRet
目录 › next › previous

malloc 等函数在分配失败时返回空指针,如果不加判断直接使用会导致标准未定义的行为。

在有虚拟内存支持的平台中,正常的内存分配一般不会失败,但申请内存过多或有误时(如参数为负数)也会导致分配失败,而对于没有虚拟内存支持的或可用内存有限的嵌入式系统,检查分配资源是否成功是十分重要的,所以本规则应该作为代码编写的一般性要求。

库的实现更需要注意这一点,如果库由于分配失败而使程序直接崩溃,相当于干扰了主程序的决策权,很可能会造成难以排查的问题,对于有高可靠性要求的软件,在极端环境中的行为是需要明确设定的。

示例:

void foo(size_t n) {
    if (n != 0) {
        char* p = (char*)malloc(n);
        p[n - 1] = '\0';              // Non-compliant, check ‘p’ first
        ....
    }
}

示例代码未检查 p 的有效性便直接使用是不符合要求的。

依据

ISO/IEC 9899:1999 7.20.3(1) ISO/IEC 9899:2011 7.22.3(1)

参考

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