Freigeben über


C6029

Aktualisiert: November 2007

C6029

Warnung C6029: Möglicher Pufferüberlauf im Aufruf von <Funktion>: Verwendung des ungeprüften Wertes

Dieses Warnung gibt an, dass an eine Funktion, die einen Puffer und eine Größe akzeptiert, eine ungeprüfte Größe übergeben wird. Die von einer externen Quelle eingelesenen Daten wurden nicht dahingehend überprüft, ob sie kleiner als die Puffergröße sind. Ein Angreifer kann für die Größe absichtlich einen größeren Wert als erwartet angeben, wodurch ein Pufferüberlauf herbeigeführt wird.

Sie sollten daher beim Lesen von Daten aus einer nicht vertrauenswürdigen externen Quelle stets eine Gültigkeitsüberprüfung durchführen. In der Regel ist es angebracht, die Größe zu überprüfen, um sicherzustellen, dass sie sich im erwarteten Bereich bewegt.

Beispiel

Im folgenden Code wird diese Warnung dadurch generiert, dass die mit Anmerkungen versehene Funktion ReadFile zwei Mal aufgerufen wird. Nach dem ersten Aufruf kennzeichnet die Post-Attributeigenschaft den zweiten Parameterwert als nicht vertrauenswürdig. Daher wird durch die Übergabe eines nicht vertrauenswürdigen Werts im zweiten Aufruf von ReadFile diese Warnung generiert, wie im folgenden Code veranschaulicht:

#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 ...
    }
  }
}

Um diese Warnung zu korrigieren, überprüfen Sie die Puffergröße, wie im folgenden Code dargestellt:

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 ...
      }
    }
  }
}

Siehe auch

Konzepte

Übersicht über Anmerkungen