AVISO C6204
Aviso aviso C6204: chamada para <function> de saturação de buffer possível: uso do parâmetro desmarcado <variable>
Este aviso indica que uma chamada de função está sendo feita que pode levar à saturação de buffer de pilha, dependendo dos valores possíveis de parâmetros para a função sendo analisadas. Esse defeito pode causar uma saturação de buffer explorável ou falha.
É uma boa idéia para revisar o código, bem como os chamadores para essa função, para ver se a função nunca pode ser chamada com dados inesperados. Se ele não fica claro que todas as chamadas são seguras, talvez seja apropriado validar a entrada para a função, verificando o tamanho de seqüências de entrada ou, anotando o parâmetro de função usando as propriedades adequadas.
Exemplo
O código a seguir gera este aviso porque o parâmetro de entrada (pCh) pode conter dados inválidos:
#include<string.h>
void f(char *pCh)
{
char buff[10];
strcpy(buff, pCh);
}
Este aviso pode ser corrigido por validar o tamanho, conforme mostrado no código a seguir:
#include<string.h>
void f(char *pCh)
{
char buff[10];
if (strlen(pCh) >= sizeof buff)
return;
strcpy (buff, pCh);
}
O código precedente pode falhar se um ponteiro ruim (pCh) é passado. Para tornar o código precedente mais resistentes, use a anotação e a função de manipulação de cadeia de caracteres seguras conforme mostrado no código a seguir:
#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);
}
Porque a ferramenta de análise não considera o conjunto de todos os chamadores possíveis para a função sendo analisadas, é possível que o código é completamente seguro.