InfiniteLoop(Windows 驱动程序 CodeQL 查询)

概述

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

建议

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

示例:

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

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

若要修复错误,我们将更改变量 i 的类型以符合 a 的宽度:

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

其他详细信息

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