C6029

Mise à jour : novembre 2007

C6029

avertissement C6029 : dépassement de mémoire tampon possible lors de l'appel à <fonction> : utilisation de la valeur non vérifiée

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 deux fois la fonction annotée ReadFile. 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"
void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
      // code ...
    }
  }
}

Pour corriger cet avertissement, vérifiez la taille de la mémoire tampon comme le montre le code suivant :

void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (cbLen <= sizeof (buff))  // check length
    {
    // code ...  
      if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  
      {
       // code ...
      }
    }
  }
}

Voir aussi

Concepts

Vue d'ensemble de l'annotation