概觀
迴圈條件中不同寬度類型之間的比較可能會導致迴圈無法終止。
建議
在迴圈條件中使用適當的類型。
範例
在此範例中,如果參數 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 和靜態工具標誌測試 頁面。