Avviso C6053
La chiamata a 'function' potrebbe non terminare la stringa 'variable'.
Osservazioni:
Questo avviso indica che la funzione specificata è stata chiamata in modo che la stringa risultante non venga terminata senza terminazione. Questo difetto può causare un sovraccarico o un arresto anomalo del buffer sfruttabile. Questo avviso viene generato anche se una funzione con annotazioni prevede una stringa con terminazione Null, ma si passa una stringa con terminazione non Null.
La maggior parte delle funzioni di gestione delle stringhe standard C e Win32 richiede e produce stringhe con terminazione zero. Alcune funzioni "stringhe con conteggio" (inclusi strncpy
, , _snprintf
wcsncpy
_mbsncpy
, e snwprintf
) non producono stringhe con terminazione zero se riempiono esattamente il buffer. In questo caso, una chiamata successiva a una funzione stringa che prevede una stringa con terminazione zero andrà oltre la fine del buffer alla ricerca dello zero. Il programma deve assicurarsi che la stringa termini con zero. In generale, è necessario passare una lunghezza alla funzione "stringa con conteggiata" una minore delle dimensioni del buffer e quindi assegnare esplicitamente zero all'ultimo carattere nel buffer.
Nome dell'analisi del codice: MISSING_ZERO_TERMINATION1
Esempi
Il codice di esempio seguente genera questo avviso:
#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
}
Per correggere questo avviso, terminare zero-terminate la stringa come illustrato nel codice di esempio seguente:
#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);
}
Il codice di esempio seguente corregge questo avviso usando la funzione di manipolazione strncpy_s
delle stringhe sicura:
#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);
}
Euristica
Questo avviso viene talvolta segnalato su alcuni idiomi garantito essere sicuro in pratica. A causa della frequenza e delle potenziali conseguenze di questo difetto, lo strumento di analisi è distorto a favore della ricerca di potenziali problemi invece della sua tipica distorsione della riduzione del rumore.