Condividi tramite


BadOverflowGuard (Query codeQL del driver di Windows)

Panoramica

Il controllo dell'overflow di un'aggiunta confrontando con uno degli argomenti dell'aggiunta ha esito negativo se le dimensioni di tutti i tipi di argomento sono inferiori a 4 byte. Questo è dovuto al fatto che il risultato dell'aggiunta viene promosso a 4 byte int.

Recommendation

Controllare l'overflow confrontando l'aggiunta 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 il overflow confrontando l'aggiunta rispetto a un valore di almeno 4 byte:

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

Altri dettagli

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, vedere la pagina CodeQL e la pagina Test del logo degli strumenti statici .