Ostrzeżenie C6053
Wywołanie metody "function" może nie spowodować zakończenia ciągu zerowego "zmiennej".
Uwagi
To ostrzeżenie wskazuje, że określona funkcja została wywołana w taki sposób, że wynikowy ciąg może nie być zakończony zero. Ta usterka może spowodować przekroczenie lub awarię buforu możliwego do wykorzystania. To ostrzeżenie jest również generowane, jeśli funkcja z adnotacją oczekuje ciągu zakończonego wartością null, ale przekazuje ciąg bez wartości null.
Większość standardowych bibliotek języka C i funkcji obsługi ciągów Win32 wymaga i generuje ciągi bez zakończenia. Kilka funkcji "zliczonych ciągów" (w tym strncpy
, , wcsncpy
_mbsncpy
, _snprintf
i snwprintf
) nie generują ciągów zakończonych zero, jeśli dokładnie wypełniają bufor. W takim przypadku kolejne wywołanie funkcji string, która oczekuje, że ciąg o zerowym zakończeniu będzie wykraczał poza koniec buforu szukającego zera. Program powinien upewnić się, że ciąg kończy się zerem. Ogólnie rzecz biorąc, należy przekazać długość do funkcji "counted string" o jedną mniejszą niż rozmiar buforu, a następnie jawnie przypisać zero do ostatniego znaku w buforze.
Nazwa analizy kodu: MISSING_ZERO_TERMINATION1
Przykłady
Następujący przykładowy kod generuje to ostrzeżenie:
#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
}
Aby poprawić to ostrzeżenie, zero zakończ ciąg, jak pokazano w poniższym przykładowym kodzie:
#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);
}
Poniższy przykładowy kod poprawia to ostrzeżenie przy użyciu funkcji bezpiecznego manipulowania ciągami 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);
}
Algorytmy heurystyczne
To ostrzeżenie jest czasami zgłaszane na niektórych idiomach, które gwarantują bezpieczeństwo w praktyce. Ze względu na częstotliwość i potencjalne konsekwencje tej wady narzędzie analizy jest stronniczy na rzecz znajdowania potencjalnych problemów zamiast ich typowego stronniczości zmniejszania szumu.