Sdílet prostřednictvím


C6029

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

Toto upozornění signalizuje, že funkci, která přebírá do vyrovnávací paměti a velikost je předávána nezaškrtnuté velikost.Data pro čtení – v ze z externího zdroje nebyl ověřen a zjistěte, zda je menší než velikost vyrovnávací paměti.Se zlými úmysly může určovat záměrně velmi větší než hodnota velikosti, která povede k přetečení vyrovnávací paměti.

Obecně platí vždy, když přečíst data z nedůvěryhodných externího zdroje, ujistěte se, chcete-li ověřit jeho platnost.Je obvykle vhodné ověřit velikost a ujistěte se, že je v očekávaný rozsah.

Příklad

Následující kód generuje upozornění voláním funkce s poznámkami ReadFile dvakrát.Po prvním volání atributu příspěvku vlastnost značky nedůvěryhodné hodnota druhého parametru.Proto předávání nedůvěryhodným hodnotu ve druhém volání ReadFile generuje upozornění, jak je znázorněno v následujícím kódu:

#include "odkazující na Windows"

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

Chcete-li opravit toto upozornění, zkontrolujte velikost vyrovnávací paměti, jak je znázorněno v následujícím kódu:

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

Viz také

Další zdroje

Přehled poznámek