Freigeben über


C6204

C6204

Warnung C6204: Möglicher Pufferüberlauf im Aufruf von <Funktion>: Verwendung des ungeprüften Parameters <Variable>.

Diese Warnung weist darauf hin, dass ein Funktionsaufruf erfolgt, der möglicherweise zu einem Überlauf eines Stapelpuffers führt, und zwar abhängig von den möglichen Werten der Parameter für die analysierte Funktion. Dieser Fehler kann einen als Angriffspunkt geeigneten Pufferüberlauf oder einen Absturz verursachen.

Sie sollten den Code und die Aufrufer dieser Funktion überprüfen, um festzustellen, ob die Funktion überhaupt mit unerwarteten Daten aufgerufen werden kann. Falls Sie nicht wissen, ob alle Aufrufe sicher sind, sollten Sie die Eingabe für die Funktion überprüfen. Dazu überprüfen Sie die Länge der Eingabezeichenfolgen oder fügen dem Funktionsparameter mithilfe geeigneter Eigenschaften Anmerkungen hinzu.

Beispiel

Im folgenden Code wird diese Warnung generiert, da der Eingabeparameter (pCh) möglicherweise ungültige Daten enthält:

#include<string.h>

void f(char *pCh)
{
  char buff[10];
  strcpy(buff, pCh);
}

Sie können diese Warnung korrigieren, indem Sie die Größe überprüfen, wie im folgenden Code dargestellt:

#include<string.h>

void f(char *pCh)
{ 
  char buff[10];
  if (strlen(pCh) >= sizeof buff)
    return;
  strcpy (buff, pCh);
}

Der vorangehende Code könnte fehlschlagen, wenn ein ungültiger Zeiger (pCh) übergeben wird. Um den vorangehenden Code flexibler zu gestalten, verwenden Sie Anmerkungen und die Funktion für die sichere Zeichenfolgenbearbeitung, wie im folgenden Code veranschaulicht:

#include<string.h>
#include <codeanalysis\sourceannotations.h>
void f([Pre(NullTerminated=SA_Yes, Null=SA_No)] char* pCh)
{
  char buff[15];
  if (strlen(pCh) > sizeof buff)
    return;
  strcpy_s(buff,sizeof(buff), pCh);
}

Da das Analysetool nicht davon ausgeht, dass alle möglichen Aufrufer der Funktion überprüft werden, ist es möglich, dass der Code vollkommen sicher ist.

Siehe auch

Referenz

strcpy_s, wcscpy_s, _mbscpy_s

Konzepte

Übersicht über Anmerkungen