C6053
Ostrzeżenie C6053: wywołanie <function> może nie zakończyć zerem ciągu <variable>
To ostrzeżenie wskazuje, że określona funkcja została wywołana w taki sposób, że wynikowy ciąg nie może być zakończony zerem.Wada ta może spowodować przepełnienie buforu lub awarię.To ostrzeżenie jest również generowane jeśli adnotowana funkcja spodziewa się ciągu zakończonego wartością null, a został przekazany ciąg, który nie jest zakończony wartością null.
Większość standardowych biblioteki języka C i funkcji obsługi ciągów Win32 wymaga i produkuje ciągi zakończone zerem.Kilka funkcji "zliczania ciągu" (łącznie z strncpy, wcsncpy, _mbsncpy, _snprintf, i snwprintf) nie wytwarza ciągów zakończonych zerem, jeśli dokładnie wypełniają one ich bufor.W tym przypadku kolejne wywołania funkcji ciągu, która oczekuj ciągu zakończonego zerem będą wykraczać poza koniec buforu w poszukiwaniu zera.Program powinien upewnić się, że ciąg kończy się zerem.Ogólnie rzecz biorąc do funkcji "zliczania ciągu" należy przekazywać długość o jedną mniejszą od rozmiaru buforu i jawnie przypisać zero do ostatniego znaku w buforze.
Przykład
Poniższy 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, należy zakończyć ciąg zerem tak 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);
}
Następujący przykładowy kod naprawia to ostrzeżenie używając bezpiecznej funkcji wykonywania operacji na ciągach 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);
}
Należy zauważyć, że to ostrzeżenie jest czasami raportowane w niektórych idiomach, dla których istnieje gwarancja, że są w praktyce bezpieczne.Przez częstotliwość i potencjalne konsekwencje tej wady narzędzie analizy jest obciążone przez znajdowanie potencjalnych problemów, zamiast typowego obciążenia zmniejszania hałasu.
Zobacz też
Informacje
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l