UNINIT.STACK.ARRAY.MIGHT

可能未初始化的数组

UNINIT.STACK.ARRAY.MIGHT 检查器发现读取的局部数组的内存可能尚未进行初始化的情况。

漏洞与风险

在 C++ 中,堆栈变量默认不进行初始化。它们一般含有来自当前堆栈内存内容的随机垃圾数据。这种未初始化的数据可能含有会引起程序流发生意外更改的值,可能存在安全隐患。

缓解与预防

为了避免发生初始化问题,务必确保所有变量和资源在首次使用之前全部进行显式初始化。注意复杂的条件情况,并确保所有路径都包含初始化设置。

漏洞代码示例

复制
  extern void pfoo(int *);
  extern int some_condition();
  
  void uninit_array_might() {
      int *a[10];
      if (some_condition()) {
          int i;
          for(i = 0; i < 10; i++) {
              a[i] = 0;
         }
     }
     pfoo(a[4]);
 }

Klocwork 标记了第 12 行,指出可能使用了未初始化数组 a 的内存。