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