Delen via


BadOverflowGuard (Windows-stuurprogramma CodeQL-query)

Overzicht

Controleren op een overloopprobleem bij een optelling door te vergelijken met een van de argumenten van de optelling mislukt als de grootte van de argumenttypen kleiner is dan 4 bytes. Dit komt doordat het resultaat van de toevoeging wordt gepromoveerd tot een 4 byte int.

Aanbeveling

Controleer de overloop door het resultaat van de optelling te vergelijken met een waarde van ten minste 4 bytes.

Voorbeeld

In dit voorbeeld resulteert het resultaat van de vergelijking in een overloop van gehele getallen:

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

Als u de fout wilt oplossen, controleert u de overloop door de optelling te vergelijken met een waarde van ten minste 4 bytes.

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

Aanvullende details

Deze query vindt u in de Microsoft GitHub CodeQL-opslagplaats. Zie de pagina CodeQL en de pagina Logotest voor statische hulpprogramma's voor meer informatie over hoe ontwikkelaars van Windows-stuurprogramma's CodeQL kunnen downloaden en uitvoeren.