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 和靜態工具標誌測試 頁面。