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