共用方式為


BadOverflowGuard (Windows 驅動程式程式碼QL 查詢)

概觀

如果所有引數類型的大小小於 4 個位元組,則比較加法的其中一個引數,檢查加法的溢位是否失敗。 這是因為加法的結果會升階為 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;
}

若要修正 Bug,請比較加法與至少 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 和靜態工具標誌測試 頁面。