C6203

Aviso C6203: buffer de saturação de buffer <variable> na chamada para <function>: comprimento de <size> excede o tamanho do buffer

Este aviso indica que um parâmetro que aponta para um buffer de tamanho conhecido de fora da pilha está sendo passado em uma função que copia mais bytes nela que esse tamanho. Essa situação fará com que uma saturação de buffer.

Esse defeito pode causar uma pane de programa ou de uma brecha na segurança pode ser explorada.

Exemplo

O código a seguir gera um aviso de C6203 e C6386. Ambos os avisos para indicar o problema de saturação de buffer porque um parâmetro incorreto (sizeof intArray) é passado para a função:

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

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

Para corrigir os dois avisos, passar o tamanho correto usando sizeof charArray conforme mostrado no código a seguir:

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

No código a seguir, o parâmetro de função char *pC for anotado, usando o WritableElementsLength propriedade. O número real de um elemento gravável em pC é o número de elementos do buffer de char *pCLen. Nesse caso, C6203 de aviso é gerado no site de chamada porque pCLen tem mais elementos que o parâmetro gravável 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 ...
}

C6202 de aviso é emitido para buffers de pilha.

Consulte também

Referência

C6202

C6386