Compartilhar via


C6204

Aviso C6204: possível saturação de buffer na telefonar para <função>: uso de parâmetro não-verificado <variável>

Este aviso indica que uma telefonar de função está sendo feita que poderia levar a uma saturação de um buffer de pilha, dependendo dos valores possíveis dos parâmetros para a função sendo analisado.Esse defeito pode causar uma saturação de buffer explorável ou falhar.

É uma mercadoria idéia para revisar o código, bem sistema autônomo sistema autônomo chamadores para esta função para ver se a função nunca pode ser chamada com dados inesperados.Se não desmarcar todas as chamadas são seguras, talvez seja apropriado para validar a entrada para a função, verificando o tamanho de qualquer seqüências de caracteres 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);
}

Esse aviso pode ser corrigido por validar o dimensionar sistema autônomo mostra o 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 inválido (pCh) é passada. Para tornar o código precedente mais resistentes, use anotação e a função de manipulação de seqüência segura sistema autônomo mostra o 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);
}

Como a ferramenta de análise não considera o conjunto de todos os chamadores possíveis para a função sendo analisado, é possível que o código é completamente seguro.

Consulte também

Conceitos

Visão geral de anotação

Referência

strcpy_s, wcscpy_s, _mbscpy_s