共用方式為


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

概觀

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

建議

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

範例

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