Freigeben über


C6203

C6203

Warnung C6203: Pufferüberlauf für Puffer <Variable> im Aufruf von <Funktion>: Die Länge <Größe> überschreitet die Puffergröße.

Diese Warnung gibt an, dass ein Parameter, der auf einen Nichtstapelpuffer 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 C6203 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( )
{
  static char charArray[5];
  static int intArray[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:

void f( )
{
  static char charArray[5];
   
  memset ((void *)charArray, 0, sizeof charArray);
  // code ...
}

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

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

Warnung C6202 wird bei Stapelpuffern ausgegeben.

Siehe auch

Referenz

C6202
C6386