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, _snprintfi 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.

Zobacz też