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.