Udostępnij za pośrednictwem


C6029

Ostrzeżenie C6029: możliwe przepełnienie buforu w wywołaniu <function>: użycie wartości niezaznaczonej

To ostrzeżenie wskazuje, że funkcja, która zajmuje bufor i rozmiar otrzymuje niesprawdzony rozmiar.Dane odczytane ze źródła zewnętrznego nie zostały zweryfikowane w celu sprawdzenia czy są mniejsze niż rozmiar buforu.Osoba atakująca może określić dla rozmiaru celowo znacznie większą wartość niż oczekiwana, która będzie prowadzić do przepełnienia buforu.

W ogólności, podczas odczytu danych z niezaufanego zewnętrznego źródła należy sprawdzić je pod kątem poprawności.Zazwyczaj należy sprawdzić rozmiar, aby upewnić się, że znajduje się w oczekiwanym zakresie.

Przykład

Poniższy kod generuje ostrzeżenie, wywołując funkcję oznaczoną adnotacją ReadFile dwa razy.Po pierwszym wywołaniu, właściwość atrybutu Post oznacza wartość drugiego parametru jako niezaufaną.Dlatego, przekazując niezaufaną wartość w drugim wywołaniu ReadFile generowane jest ostrzeżenie, tak jak pokazano w poniższym kodzie:

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

Aby poprawić to ostrzeżenie, sprawdź rozmiar buforu, tak jak pokazano w poniższym kodzie:

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

Zobacz też

Inne zasoby

Omówienie adnotacji