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.

Consulte também

Referência

strcpy_s, wcscpy_s, _mbscpy_s

Conceitos

Visão geral de anotação