C6204
avviso C6204: possibile sovraccarico del buffer nella chiamata a <funzione>: utilizzo del parametro non verificato <variabile>
L'avviso indica che è stata effettuata una chiamata a una funzione che poteva potenzialmente provocare il sovraccarico di un buffer allocato nello stack, in base ai valori possibili dei parametri della funzione analizzata. Questo problema potrebbe provocare un arresto anomalo o un sovraccarico del buffer.
È consigliabile esaminare il codice nonché i chiamanti alla funzione per verificare se la funzione può essere chiamata con dati non previsti. Se non è chiaro che tutte le chiamate sono protette, potrebbe essere appropriato convalidare l'input alla funzione controllando la lunghezza delle stringhe di input oppure annotando il parametro di funzione utilizzando proprietà adeguate.
Esempio
Nel codice riportato di seguito viene generato questo avviso perché il parametro di input (pCh) potrebbe contenere dati non validi.
#include<string.h>
void f(char *pCh)
{
char buff[10];
strcpy(buff, pCh);
}
L'avviso potrebbe essere corretto convalidando la dimensione come riportato nel codice seguente:
#include<string.h>
void f(char *pCh)
{
char buff[10];
if (strlen(pCh) >= sizeof buff)
return;
strcpy (buff, pCh);
}
Il codice potrebbe non riuscire se viene passato un puntatore non valido (pCh). Per rendere il codice sopra riportato più adattabile, utilizzare la funzione di modifica delle stringhe protetta e di annotazione, come illustrato nel codice riportato di seguito.
#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);
}
Dal momento che lo strumento di analisi non considera l'insieme di tutti i possibili chiamanti alla funzione analizzata, è possibile che il codice sia completamente protetto.