Condividi tramite


C6203

avviso C6203: sovraccarico del buffer non allocato nello stack <variabile> nella chiamata a <funzione>: la lunghezza <dimensione> supera la dimensione del buffer

L'avviso indica che è in corso il passaggio di un parametro che fa riferimento a un buffer non 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 una vulnerabilità della protezione o un arresto anomalo del programma.

Esempio

Il codice seguente genera gli avvisi C6203 e C6386 che indicano entrambi un problema di sovraccarico del buffer a causa del passaggio alla funzione di un parametro non corretto (sizeof intArray):

#include <memory.h>
void f( )
{
  static char charArray[5];
  static int intArray[5];

  memset ((void *)charArray, 0, sizeof intArray);
  // code ...
}

Per risolvere i problemi, passare la dimensione corretta utilizzando sizeof charArray come indicato nel codice seguente:

void f( )
{
  static char charArray[5];
   
  memset ((void *)charArray, 0, sizeof charArray);
  // code ...
}

Nel codice seguente il parametro di funzione char *pC viene annotato utilizzando la proprietà WritableElementsLength. Il numero effettivo di elementi modificabili in pC corrisponde al numero di elementi del buffer char *pCLen. In tal caso, nel sito di chiamata viene generato l'avviso C6203 in quanto pCLen ha più elementi del parametro modificabile 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'avviso C6202 viene generato per i buffer allocati nello stack.

Vedere anche

Riferimenti

C6202

C6386