BadOverflowGuard (Windows Driver CodeQL クエリ)
概要
すべての引数の型のサイズが 4 バイトより小さい場合、加算の引数の 1 つとの比較による加算のオーバーフローのチェックは失敗します。 これは、加算の結果が 4 バイトの int にプロモートされるためです。
推奨事項
加算結果を少なくとも 4 バイトの値と比較して、オーバーフローを確認します。
例
この例では、比較の結果、整数オーバーフローが発生します。
unsigned short CheckForInt16OverflowBadCode(unsigned short v, unsigned short b)
{
if (v + b < v) // BUG: "v + b" will be promoted to 32 bits
{
// ... do something
}
return v + b;
}
バグを修正するには、加算を少なくとも 4 バイトの値と比較してオーバーフローをチェックします。
unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
if (v + b > 0x00FFFF)
{
// ... do something
}
return v + b;
}
追加の詳細
このクエリは、Microsoft GitHub CodeQL リポジトリにあります。 Windows ドライバー開発者が CodeQL をダウンロードして実行する方法の詳細については、「CodeQL と静的ツールのロゴ テスト」ページを参照してください。