Freigeben über


C6202

C6202

Warnung C6202: Pufferüberlauf für <Variable> (möglicherweise stapelzugeordnet) im Aufruf von <Funktion>: Die Länge <Größe> überschreitet die Puffergröße von <Maximum>.

Diese Warnung gibt an, dass ein Parameter, der auf einen Stapelpuffer bekannter Größe zeigt, an eine Funktion übergeben wird, die mehr Bytes in den Puffer kopiert als anhand der Größe angegeben. Dadurch wird ein Pufferüberlauf verursacht. Dieser Fehler kann eine ausnutzbare Sicherheitslücke oder einen Programmabsturz zur Folge haben.

Beispiel

Im folgenden Code werden die Warnungen C6202 und C6386 generiert. Beide Warnungen weisen auf Pufferüberlaufprobleme hin, da ein falscher Parameter (sizeof intArray) an die Funktion übergeben wird:

#include <memory.h>
void f( )
{
  int intArray[5];
  char charArray[5];

  memset ((void *)charArray, 0, sizeof intArray);
  // code ...
}

Um beide Warnungen zu korrigieren, übergeben Sie mit sizeof charArray die richtige Größe, wie im folgenden Code dargestellt:

#include <memory.h>
void f( )
{
  char charArray[5];
 
  memset ((void *)charArray, 0, sizeof charArray);
}

Im folgenden Code werden dem Funktionsparameter char *pC mithilfe der WritableElementsLength-Eigenschaft Anmerkungen hinzugefügt. Die tatsächliche Anzahl der schreibbaren Elemente von pC entspricht der Anzahl der Elemente des Puffers char *pCLen. In diesem Fall wird die Warnung C6202 auf der Aufrufsite generiert, weil pCLen mehr Elemente als der schreibbare Parameter pC aufweist.

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

Warnung C6203 wird bei Nichtstapelpuffern ausgegeben.

Siehe auch

Referenz

C6386
C6203