InfiniteLoop(Windows 驱动程序 CodeQL 查询)

概述

循环条件中不同宽度的类型之间的比较可能会导致循环无法终止。

建议

在循环条件中使用适当的类型。

示例

在此示例中,如果 参数的值大于 SHRT_MAX,则比较结果可能会导致无限循环:

void InfiniteLoop(int a)
{
    for (short i = 0; i < a; i++) // BUG: infinite loop
    {
        // ...
    }
}

为了修复该 bug,我们将更改变量 i 的类型,以匹配 宽度:

void NotInfiniteLoop(int a)
{
    for (int i = 0; i < a; i++) 
    {
        // ...
    }
}

其他详细信息

可以在 Microsoft GitHub CodeQL 存储库中找到此查询。 有关 Windows 驱动程序开发人员如何下载和运行 CodeQL 的详细信息,请参阅 CodeQL 和静态工具徽标测试 页。