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 和靜態工具標誌測試 頁面。