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"
bool f(HANDLE hFile)
{
char buff[MAX_PATH];
DWORD cbLen;
DWORD cbRead;
// Read the number of byte to read (cbLen).
if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))
{
return false;
}
// Read the bytes
if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL)) // warning 6029
{
return false;
}
return true;
}
Um diese Warnung zu korrigieren, überprüfen Sie die Puffergröße, wie im folgenden Code dargestellt:
bool f(HANDLE hFile)
{
char buff[MAX_PATH];
DWORD cbLen;
DWORD cbRead;
// Read the number of byte to read (cbLen).
if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))
{
return false;
}
// Ensure that there's enough space in the buffer to read that many bytes.
if (cbLen > sizeof(buff))
{
return false;
}
// Read the bytes
if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL)) // warning 6029
{
return false;
}
return true;
}