次の方法で共有


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