JD.INF.ALLOC
无限循环内的分配
在无限循环内,已使用大量内存且没有对可用内存进行验证时,会发生 JD.INF.ALLOC。
漏洞与风险
该软件不能正确地控制内存分配。如果攻击者可以触发不受控制的内存分配,那么最终会导致可用资源耗尽,也称为拒绝服务攻击。拒绝服务攻击会降低应用程序及其主机操作系统的速度,阻止有效用户访问软件,并可能对周围环境产生影响。
缓解与预防
检查可用内存,并且不要使用无限循环。例如,使用 Runtime.getRuntime().freeMemory() 方法来检查可用内存。
漏洞代码示例
复制
while(true)
{
byte[] b = new byte[NUMBER];
list.add(b);
}
在以上示例中,无限分配可能导致 OutOfMemoryError 异常。Klocwork 报告第 3 行出现 JD.INF.ALLOC 缺陷,这表示“无限循环内的内存分配可能会导致 OutOfMemoryError”。
修正代码示例
复制
while(true)
{
if (Runtime.getRuntime().freeMemory() > NUMBER) {
byte[] b = new byte[NUMBER];
list.add(b);
}
}
通过使用 Runtime.getRuntime().freeMemory() 方法添加可用内存检查,可以修复此问题。