Condividi tramite


BadOverflowGuard (query codeQL del driver di Windows)

Informazioni generali

Controllare l'overflow di un'addizione confrontandolo con uno degli argomenti dell'addizione fallisce se la dimensione di tutti i tipi di argomento è inferiore a 4 byte. Ciò è dovuto al fatto che il risultato dell'aggiunta viene convertito a un intero a 4 byte.

Raccomandazione

Controllare l'overflow confrontando l'addizione con un valore di almeno 4 byte.

Esempio

In questo esempio, il risultato del confronto comporterà un overflow intero:

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

Per correggere il bug, controllare l'overflow confrontando l'addizione con un valore di almeno 4 byte:

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

Dettagli aggiuntivi

Questa query è disponibile nel repository CodeQL di Microsoft GitHub. Per informazioni dettagliate sul modo in cui gli sviluppatori di driver Windows possono scaricare ed eseguire CodeQL, consultare la pagina CodeQL e il logo degli strumenti statici.