C6203
avertissement C6203 : dépassement de mémoire tampon <variable> non allouée par la pile lors de l'appel à <fonction> : la longueur <taille> dépasse la taille du tampon
Cet avertissement indique qu'un paramètre qui pointe vers une mémoire tampon non allouée par 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 peut provoquer une faille de sécurité ou une panne de programme exploitable.
Exemple
Le code suivant génère les avertissements C6203 et C6386. Ces deux avertissements indiquent un problème de dépassement de mémoire tampon car un paramètre incorrect (sizeof intArray) est passé à la fonction :
#include <memory.h>
void f( )
{
static char charArray[5];
static int intArray[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 :
void f( )
{
static char charArray[5];
memset ((void *)charArray, 0, sizeof charArray);
// code ...
}
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 dans pC est le nombre d'éléments de la mémoire tampon char *pCLen. Dans ce cas, l'avertissement C6203 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 <malloc.h>
#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen")] char *pC, char *pCLen);
void test_f( )
{
char *pChar = ( char * ) malloc ( 10 );
char buff[15];
test_f ( pChar, buff ); // warning 6203
// code ...
}
L'avertissement C6202 s'affiche pour les mémoires tampons de la pile.