Compartir a través de


C6029

Actualización: noviembre 2007

C6029

Advertencia C6029: Posible saturación de búfer en la llamada a <función>: uso del valor sin comprobar

Esta advertencia indica que a una función que toma un búfer y un tamaño se le está pasando un tamaño que no se ha comprobado. Los datos se leyeron de algún origen externo y no se ha comprobado si son menores que el tamaño del búfer. Un atacante podría especificar intencionadamente un valor para el tamaño mucho más grande de lo esperado, lo que conducirá a una saturación del búfer.

Generalmente, cada vez que se lean datos de un origen externo que no sea de confianza, asegúrese de comprobar su validez. Habitualmente, conviene comprobar el tamaño para asegurarse de que está comprendido en el intervalo esperado.

Ejemplo

El código siguiente genera esta advertencia llamando dos veces a la función ReadFile anotada. Después de la primera llamada, la propiedad del atributo Post marca el segundo valor del parámetro que no sea de confianza. Por consiguiente, al pasar un valor que no es de confianza en la segunda llamada a ReadFile, se genera esta advertencia como se muestra en el código siguiente:

#include "windows.h"
void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
      // code ...
    }
  }
}

Para corregir esta advertencia, compruebe el tamaño de búfer como se muestra en el siguiente código:

void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (cbLen <= sizeof (buff))  // check length
    {
    // code ...  
      if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  
      {
       // code ...
      }
    }
  }
}

Vea también

Conceptos

Información general sobre anotaciones