C6202
avertissement C6202 : dépassement de mémoire tampon de <variable> (sans doute allouée par la pile), lors de l'appel à <fonction> : la longueur <taille> dépasse la taille <max> du tampon
Cet avertissement indique qu'un paramètre qui pointe vers une mémoire tampon de la pile, dont la taille est connue, est passé dans une fonction qui y copie plus d'octets que cette taille. Cette situation provoque un dépassement de mémoire tampon. Ce défaut risque de créer une faille de sécurité ou un blocage du programme exploitable.
Exemple
Le code suivant génère les avertissements C6202 et C6386. Ces deux avertissements indiquent des problèmes de dépassement de mémoire tampon car un paramètre incorrect (sizeof intArray) est passé à la fonction :
#include <memory.h>
void f( )
{
int intArray[5];
char charArray[5];
memset ((void *)charArray, 0, sizeof intArray);
// code ...
}
Pour corriger les deux avertissements, passez la taille correcte à l'aide de sizeof charArray, comme indiqué dans le code suivant :
#include <memory.h>
void f( )
{
char charArray[5];
memset ((void *)charArray, 0, sizeof charArray);
}
Dans le code suivant, le paramètre de fonction char *pC est annoté en utilisant la propriété WritableElementsLength. Le nombre réel d'éléments accessibles en écriture de pC est le nombre d'éléments de la mémoire tampon char *pCLen. Dans ce cas, l'avertissement C6202 est généré dans le site d'appel car pCLen contient plus d'éléments que le paramètre accessible en écriture pC.
#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen") ] char *pC, char *pCLen);
void test_f()
{
char pc[12];
char buff[17];
f(pc, buff); // warning 6202
// code...
}
L'avertissement C6203 s'affiche pour les mémoires tampons non allouées par la pile.