C6029
warning C6029: possible buffer overrun in call to <function>: use of unchecked value
Cet avertissement indique qu'une taille non contrôlée est passée à une fonction qui accepte une mémoire tampon et une taille.Les données lues à partir d'une source externe n'ont pas été vérifiées pour contrôler si elles sont inférieures à la taille de la mémoire tampon.Un agresseur peut spécifier intentionnellement une valeur beaucoup plus grande que la valeur attendue pour la taille, ce qui entraînera un dépassement de mémoire tampon.
En général, chaque fois que vous lisez des données d'une source externe non fiable, pensez à vérifier leur validité.Il convient généralement de vérifier la taille pour s'assurer qu'elle est comprise dans la plage attendue.
Exemple
Le code suivant génère cet avertissement en appelant la fonction annotée ReadFile deux fois.Après le premier appel, la propriété de l'attribut Post marque la deuxième valeur de paramètre comme étant non fiable.Par conséquent, le passage d'une valeur non fiable dans le deuxième appel à ReadFile génère cet avertissement comme le montre le code suivant :
#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;
}
Pour corriger cet avertissement, vérifiez la taille de la mémoire tampon comme le montre le code suivant :
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;
}