C6029

warning C6029: possible buffer overrun in call to <function>: use of unchecked value

Questo avviso indica che a una funzione che accetta un buffer e una dimensione viene passata una dimensione non verificata.I dati letti da qualche origine esterna non sono stati verificati per controllare se sono di dimensioni inferiori a quella del buffer.Un utente malintenzionato potrebbe specificare un valore molto maggiore di quello previsto per la dimensione, determinando un sovraccarico del buffer.

In genere, quando si leggono i dati da un'origine esterna non attendibile, è consigliabile accertarsi di verificarne la validità.Di solito è consigliabile verificare le dimensioni per accertarsi che rientrino nell'intervallo previsto.

Esempio

Il codice seguente genera questo avviso chiamando due volte la funzione annotata ReadFile.Dopo la prima chiamata, la proprietà dell'attributo Post contrassegna il valore del secondo parametro come non attendibile.Il passaggio di un valore non attendibile nella seconda chiamata a ReadFile genera quindi questo avviso, come illustrato nel codice seguente:

#include "windows.h"

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

Per risolvere il problema, verificare le dimensioni del buffer come indicato nel codice seguente:

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
    {
        return false;
    }
    // Ensure that there's enough space in the buffer to read that many bytes.
    if (cbLen > sizeof(buff))
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

Vedere anche

Altre risorse

Cenni preliminari sull'annotazione