C6202
avviso C6202: sovraccarico del buffer per <variabile>, probabilmente allocato nello stack, nella chiamata a <funzione>: la lunghezza <dimensione> supera la dimensione del buffer <max>
L'avviso indica che è in corso il passaggio di un parametro che punta a un buffer allocato nello stack di dimensione nota a una funzione che copia un numero di byte superiore alla dimensione stessa. La situazione provocherà un sovraccarico del buffer. L'errore potrebbe provocare un problema di sicurezza o un arresto anomalo del programma.
Esempio
Il codice seguente genera gli avvisi C6202 e C6386 che indicano entrambi problemi di sovraccarico del buffer a causa del passaggio alla funzione di un parametro non corretto (sizeof intArray):
#include <memory.h>
void f( )
{
int intArray[5];
char charArray[5];
memset ((void *)charArray, 0, sizeof intArray);
// code ...
}
Per risolvere i problemi, passare la dimensione corretta utilizzando sizeof charArray come indicato nel codice seguente:
#include <memory.h>
void f( )
{
char charArray[5];
memset ((void *)charArray, 0, sizeof charArray);
}
Nel codice riportato di seguito il parametro di funzione char *pC viene annotato utilizzando la proprietà WritableElementsLength. Il numero effettivo di elementi modificabili di pC corrisponde al numero di elementi del buffer char *pCLen. In tal caso, nel sito di chiamata viene generato l'avviso C6202 in quanto pCLen ha più elementi del parametro modificabile 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'avviso C6203 viene generato per i buffer non allocati nello stack.