Sdílet prostřednictvím


C6029

upozornění C6029: možné přetečení vyrovnávací paměti při volání <function>: použití nekontrolované hodnoty

Toto upozornění znamená, že funkci, která přebírá vyrovnávací paměť a velikost byla předána nekontrolovaná velikost.Data o čtení nějakého externího zdroje nebyla ověřena, zda jsou menší než velikost vyrovnávací paměti.Útočník může záměrně určit hodnotu velikosti o mnoho vyšší, což může vést k přetečení vyrovnávací paměti.

Obecně při čtení dat z nedůvěryhodného externího zdroje je zapotřebí ověřit jeho platnost.Je obvykle vhodné ověřit velikost pro ujištění se, že se nachází v očekávaném rozsahu.

Příklad

Následující kód vygeneruje toto upozornění dvojitým voláním funkce s poznámkami ReadFile.Po prvním volání označí vlastnost atributu Post hodnotu druhého parametru jako nedůvěryhodnou.Proto při předávání nedůvěryhodné hodnoty v rámci druhého volání vygeneruje ReadFile toto varování, jak je tomu v následujícím kódu:

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

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