CS.DBZ.ITERATOR
在除以零的运算中可能使用了循环迭代器
尝试在除法或模运算中使用零作为除数会导致运行时错误。错误处理或争用条件无效时,经常出现除以零的情况,并且通常会导致程序异常终止。在 C# 代码中将值用作除法或模运算的除数之前,必须进行检查以确认值不为零。
DBZ 检查器会查找零常量值用作除法或模运算除数的实例。
CS.DBZ.ITERATOR 检查器会标记以下情况:循环迭代器在循环执行中赋值为零常数值,而后续又需要在不进行零值检查的情况下,可能被显式使用或传递到可能将其用作除法或模运算除数的函数。
漏洞与风险
整数除以零通常会导致进程失败或异常。运算也可能成功,但会给出错误答案。
缓解与预防
异常处理无效时,经常出现除以零的情况。为避免此漏洞,在将值用作除法或模运算的除数之前,检查该值是否为零。
漏洞代码示例
复制
namespace DBZ
{
class Program
{
static void Test12()
{
int sum = 12;
for (int i = 10; i > -1; --i)
{
sum = 3628800 / i;
}
}
}
}
Klocwork 针对第 10 行生成问题报告,指出循环迭代器 i 可能在除以零的情况中使用。
修正代码示例
复制
namespace DBZ
{
class Program
{
static void Test12()
{
int sum = 12;
for (int i = 10; i > -1; --i)
{
if(i != 0 )
{
sum = 3628800 / i;
}
}
}
}
}
漏洞代码示例中的问题已得到修正。在第 10 行检查输入变量 i 是否为零常量值,如果值为零则阻止出现除法运算。