UNINIT.STACK.MIGHT
可能未初始化的变量
UNINIT.STACK.MIGHT 检查器发现读取的非类类型的局部变量可能尚未进行初始化的情况。
漏洞与风险
在 C++ 中,堆栈变量默认不进行初始化。它们一般含有来自当前堆栈内存内容的随机垃圾数据。这种未初始化的数据可能含有会引起程序流发生意外更改的值,可能存在安全隐患。
缓解与预防
为了避免发生初始化问题,务必确保所有变量和资源在首次使用之前全部进行显式初始化。注意复杂的条件情况,并确保所有路径都包含初始化设置。
漏洞代码示例
复制
int foo(int t) {
int x;
if (t > 16) {
x = 1;
} else if (t > 8) {
x = 2;
}
return x + 1;
}
Klocwork 标记了第 8 行,指出可能使用了未初始化变量 x 的值。