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 .