C6203
Actualización: noviembre 2007
C6203
Advertencia C6203: Saturación de búfer para el búfer fuera de pila <variable> en la llamada a <función>: la longitud <tamaño> supera el tamaño de búfer
Esta advertencia indica que un parámetro que señala a un búfer no 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.
Este defecto podría provocar una carencia de seguridad explotable o un bloqueo del programa.
Ejemplo
El código siguiente genera las advertencias C6203 y C6386. Ambas advertencias indican el problema de saturación del búfer porque se pasó un parámetro incorrecto (sizeofintArray) a la función:
#include <memory.h>
void f( )
{
static char charArray[5];
static int intArray[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:
void f( )
{
static char charArray[5];
memset ((void *)charArray, 0, sizeof charArray);
// code ...
}
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 en pC es el número de elementos del búfer char *pCLen. En este caso, la advertencia C6203 se genera en el sitio de la llamada porque pCLen tiene más elementos que el parámetro de escritura pC.
#include <malloc.h>
#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen")] char *pC, char *pCLen);
void test_f( )
{
char *pChar = ( char * ) malloc ( 10 );
char buff[15];
test_f ( pChar, buff ); // warning 6203
// code ...
}
La advertencia C6202 se emite para los búferes de pila.