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

避免使用在栈上动态分配内存的函数

2.20 ID_stackAllocation
目录 › next › previous

alloca、strdupa 等函数可以在栈上动态分配内存,但分配失败时难以通过标准方法控制程序的行为。

在栈上动态分配内存的函数可能效率更高,分配的内存也不用显式回收,但无法满足分配需求时会直接导致运行时错误,对其返回值的检查是无效的。应避免使用这种后果难以控制的函数,尤其在循环和递归调用过程中更不应使用这种函数,而且这种函数不是标准函数,依赖平台和编译器的具体实现。

示例:

#include <alloca.h>  // Or use malloc.h in MSVC

void fun(size_t n) {
    int* p = (int*)alloca(n * sizeof(int));  // Non-compliant
    if (!p) {
        return;  // Invalid
    }
    ....
}

例中 alloca 函数在栈上分配内存,如果 n 过大会使程序崩溃。

相关

ID_variableLengthArray ID_invalidNullCheck

参考

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