InfiniteLoop (Windows Driver 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 と静的ツールのロゴ テスト」ページを参照してください。