C6204

avertissement C6204 : dépassement de mémoire tampon possible lors de l'appel à <fonction> : utilisation du paramètre non vérifié <variable>

Cet avertissement indique qu'un appel de fonction en cours est susceptible de provoquer un dépassement de mémoire tampon de la pile, en fonction des valeurs de paramètres possibles pour la fonction analysée. Ce défaut peut provoquer un blocage ou un dépassement de mémoire tampon exploitable.

Il est recommandé d'examiner le code, ainsi que les appelants pour cette fonction, pour déterminer si la fonction peut être appelée avec des données inattendues. Tous les appels n'étant pas forcément sécurisés ; il est préférable de valider les entrées de la fonction en vérifiant la longueur des chaînes d'entrée ou en annotant le paramètre de fonction à l'aide des propriétés appropriées.

Exemple

Le code suivant génère cet avertissement car le paramètre d'entrée (pCh) peut contenir des données non valides :

#include<string.h>

void f(char *pCh)
{
  char buff[10];
  strcpy(buff, pCh);
}

Cet avertissement peut être corrigé en validant la taille, comme indiqué dans le code suivant :

#include<string.h>

void f(char *pCh)
{ 
  char buff[10];
  if (strlen(pCh) >= sizeof buff)
    return;
  strcpy (buff, pCh);
}

Le code précédent peut échouer si un pointeur incorrect (pCh) est passé. Pour rendre le code précédent plus résistant, utilisez l'annotation et la fonction de manipulation de chaînes sécurisée, comme indiqué dans le code suivant :

#include<string.h>
#include <codeanalysis\sourceannotations.h>
void f([Pre(NullTerminated=SA_Yes, Null=SA_No)] char* pCh)
{
  char buff[15];
  if (strlen(pCh) > sizeof buff)
    return;
  strcpy_s(buff,sizeof(buff), pCh);
}

Étant donné que l'outil d'analyse ne tient pas compte de l'ensemble des appelants possibles pour la fonction analysée, le code peut être en fait complètement sécurisé.

Voir aussi

Référence

strcpy_s, wcscpy_s, _mbscpy_s

Concepts

Vue d'ensemble de l'annotation