Aracılığıyla paylaş


C6029

uyarı C6029: Olası arabellek taşması için <function> çağrı: denetlenmeyen değeri kullanın

Bu uyarı, bir arabellek ve bir boyut alan işlevin denetlenmeyen bir boyut tarafından geçildiğini gösterir.Bir dış kaynaktan okunan verinin arabellek boyutundan küçük olup olmadığı doğrulanmadı.Bir saldırgan bilerek beklenen boyuttan daha büyük bir değer belirtebilir. Bu da arabellek taşmasına neden olur.

Genellikle, güvenilmeyen bir dış kaynaktan veri okurken geçerliliğini doğruladığınızdan emin olun.Beklenen aralık içinde olduğundan emin olmak için boyutu doğrulamak genellikle uygundur.

Örnek

Aşağıdaki kod, Açıklama eklenmiş işlevi iki defa çağırarak bu uyarıya neden olur ReadFile .İlk çağrısının ardından, ikinci öznitelik özelleği ikinci güvenilmeyen parametreyi işaretler.Bu nedenle, ReadFile 'a yapılan çağrıdaki ikinci güvenilmeyen değeri geçmek aşağıdaki kodda gösterildiği gibi bu uyarıya neden olur:

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

Bu uyarıyı düzeltmek için aşağıdaki kodda gösterildiği gibi arabellek boyutunu kontrol edin:

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

Ayrıca bkz.

Diğer Kaynaklar

Ek açıklama genel bakış