Compartir a través de


C6204

Actualización: noviembre 2007

C6204

Advertencia C6204: Posible saturación de búfer en la llamada a <función>: uso del parámetro sin activar <variable>

Esta advertencia indica que se está realizando una llamada a una función que podría provocar la saturación de un búfer de pila, según cuáles sean los valores posibles de los parámetros de la función analizada. Este defecto puede producir una saturación del búfer explotable o un bloqueo.

Es conveniente revisar el código, así como los llamadores a esta función, para comprobar si existe la posibilidad de que, en algún momento, se llame a la función con datos inesperados. Si no es patente que todas las llamadas son seguras, puede ser conveniente validar la entrada a la función comprobando la longitud de las cadenas de entrada o anotando el parámetro de la función mediante las propiedades apropiadas.

Ejemplo

El código siguiente genera esta advertencia porque el parámetro de entrada (pCh) podría contener los datos no válidos:

#include<string.h>

void f(char *pCh)
{
  char buff[10];
  strcpy(buff, pCh);
}

Esta advertencia se puede corregir validando el tamaño como se muestra en el código siguiente:

#include<string.h>

void f(char *pCh)
{ 
  char buff[10];
  if (strlen(pCh) >= sizeof buff)
    return;
  strcpy (buff, pCh);
}

Se podría producir un error en el código anterior si se pasa un puntero (pCh) no válido. Para hacer que el código anterior sea más resistente, utilice la anotación y la función de manipulación de cadenas de caracteres segura como se muestra en el código siguiente:

#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);
}

Dado que la herramienta de análisis no considera el conjunto de todos los llamadores posibles a la función analizada, es posible que el código sea totalmente seguro.

Vea también

Conceptos

Información general sobre anotaciones

Referencia

strcpy_s, wcscpy_s, _mbscpy_s