Sdílet prostřednictvím


BadOverflowGuard (dotaz CodeQL ovladače Windows)

Přehled

Kontrola přetečení při sčítání pomocí porovnání s jedním z argumentů selže, pokud velikost všech typů argumentů je menší než 4 bajty. Důvodem je to, že výsledek přidání je povýšen na 4 bajtový int.

Doporučení

Zkontrolujte přetečení porovnáním výsledku sčítání s hodnotou, která má alespoň 4 bajty.

Příklad

V tomto příkladu výsledkem porovnání bude celé číslo přetečení:

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;
}

Chcete-li chybu opravit, zkontrolujte přetečení porovnáním výsledku sčítání s hodnotou, která má alespoň 4 bajty.

unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
    if (v + b > 0x00FFFF)
    {
        // ... do something
    }
    return v + b;
}

Další podrobnosti

Tento dotaz najdete v úložišti Microsoft GitHub CodeQL. Podrobnosti o tom, jak mohou vývojáři ovladačů systému Windows stáhnout a spustit CodeQL, najdete na stránce CodeQL and the Static Tools Logo Test.