共用方式為


InfiniteLoop (Windows 驅動程式程式碼QL 查詢)

概觀

迴圈條件中不同寬度類型的比較可能會導致迴圈無法終止。

建議

在迴圈條件中使用適當的類型。

範例

在此範例中,如果引數的值大於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 和靜態工具標誌測試 頁面。