C6202

Actualización: noviembre 2007

C6202

Advertencia C6202: Saturación de búfer para <variable>, que está asignado a la pila, en la llamada a <función>: la longitud <tamaño> supera el tamaño de búfer <máx>

Esta advertencia indica que un parámetro que señala a un búfer de pila de tamaño conocido se pasa a una función que copia más bytes en él de los que caben. Esta situación producirá una saturación del búfer. Es probable que este defecto provoque una carencia de seguridad explotable o un bloqueo del programa.

Ejemplo

El código siguiente genera las advertencias C6202 y C6386. Ambas advertencias indican problemas de saturación del búfer porque se pasó un parámetro incorrecto (sizeofintArray) a la función:

#include <memory.h>
void f( )
{
  int intArray[5];
  char charArray[5];

  memset ((void *)charArray, 0, sizeof intArray);
  // code ...
}

Para corregir ambas advertencias, pase el tamaño correcto utilizando sizeofcharArray como se muestra en el código siguiente:

#include <memory.h>
void f( )
{
  char charArray[5];
 
  memset ((void *)charArray, 0, sizeof charArray);
}

En el código siguiente, el parámetro de función char *pC se anota utilizando la propiedad WritableElementsLength. El número real de elementos que se pueden escribir de pC es el número de elementos del búfer char *pCLen. En este caso, la advertencia C6202 se genera en el sitio de la llamada porque pCLen tiene más elementos que el parámetro de escritura 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...
}

La advertencia C6203 se emite para los búferes no de pila.

Vea también

Referencia

C6386

C6203