共用方式為


BadOverflowGuard (Windows 驅動程序程序代碼QL 查詢)

概觀

如果所有引數類型的大小都小於 4 個位元組,則通過將加法的其中一個引數進行比較來檢查加法過程中的溢位會失敗。 這是因為加法的結果被轉換為 4 位元組的整數類型。

建議

將加法與至少 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 和靜態工具標誌測試 頁面。