C6202
Aviso C6202: de saturação de buffer para <variable>, que é possivelmente a pilha alocada, na chamada para <function>: comprimento de <size> excede o tamanho do buffer <max>
Este aviso indica que um parâmetro, apontando para um buffer de tamanho conhecido de 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 é a probabilidade de causar uma pane de programa ou de uma brecha na segurança pode ser explorada.
Exemplo
O código a seguir gera avisos C6202 e C6386. Ambas as advertências indicam problemas de saturação de buffer porque um parâmetro incorreto (sizeof intArray) é passado para a função:
#include <memory.h>
void f( )
{
int intArray[5];
char charArray[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:
#include <memory.h>
void f( )
{
char charArray[5];
memset ((void *)charArray, 0, sizeof charArray);
}
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 do pC é o número de elementos do buffer de char *pCLen. Nesse caso, C6202 de aviso é gerado no site de chamada porque pCLen tem mais elementos que o parâmetro gravável 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...
}
C6203 de aviso é emitido para buffers de fora da pilha.