Warnung C6053
Der Aufruf von "function" darf keine Zeichenfolge 'variable' null beenden.
Hinweise
Diese Warnung gibt an, dass die angegebene Funktion so aufgerufen wurde, dass die resultierende Zeichenfolge möglicherweise nicht null beendet wird. Dieser Fehler kann zu einem ausnutzenden Pufferüberlauf oder Absturz führen. Diese Warnung wird auch generiert, wenn eine kommentierte Funktion eine null-beendete Zeichenfolge erwartet, aber Sie eine nicht null-beendete Zeichenfolge übergeben.
Die meisten C-Standardbibliotheks- und Win32-Zeichenfolgenbehandlungsfunktionen erfordern und erzeugen Null-beendete Zeichenfolgen. Einige "gezählte Zeichenfolgen"-Funktionen (einschließlich strncpy
, , , _mbsncpy
_snprintf
und snwprintf
) erzeugen keine Zeichenfolgen mit Nullen, wenn sie genau ihren Puffer wcsncpy
füllen. In diesem Fall geht ein nachfolgender Aufruf einer Zeichenfolgenfunktion, die erwartet, dass eine Zeichenfolge mit Null über das Ende des Puffers hinausgeht, der nach der Null sucht. Das Programm sollte sicherstellen, dass die Zeichenfolge mit einer Null endet. Im Allgemeinen sollten Sie eine Länge an die Funktion "Zeichenfolge gezählt" übergeben, die kleiner als die Größe des Puffers ist, und weisen Dann explizit dem letzten Zeichen im Puffer Null zu.
Codeanalysename: MISSING_ZERO_TERMINATION1
Beispiele
Im folgenden Beispielcode wird diese Warnung generiert:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource="Hello, World!";
strncpy(szDest, szSource, MAX);
return strlen(szDest); // possible crash here
}
Um diese Warnung zu korrigieren, beenden Sie die Zeichenfolge null, wie im folgenden Beispielcode gezeigt:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource="Hello, World!";
strncpy(szDest, szSource, MAX-1);
szDest[MAX-1]=0;
return strlen(szDest);
}
Der folgende Beispielcode korrigiert diese Warnung mithilfe der Funktion für sichere Zeichenfolgenmanipulation strncpy_s
:
#include <string.h>
#define MAX 15
size_t f( )
{
char szDest[MAX];
char *szSource= "Hello, World!";
strncpy_s(szDest, sizeof(szDest), szSource, strlen(szSource));
return strlen(szDest);
}
Heuristik
Diese Warnung wird manchmal auf bestimmte Idiome gemeldet, die in der Praxis sicher sind. Aufgrund der Häufigkeit und potenziellen Folgen dieses Fehlers ist das Analysetool für das Auffinden potenzieller Probleme anstelle seiner typischen Verzerrungen zur Verringerung des Lärms voreingenommen.