Uyarı C6053
'function' çağrısı 'variable' dizesini sıfır sonlandırmayabilir.
Açıklamalar
Bu uyarı, belirtilen işlevin sonuçta elde edilen dizenin sıfır sonlandırılmaması için çağrıldığını gösterir. Bu hata, yararlanılabilir arabellek taşmasına veya kilitlenmesine neden olabilir. Bu uyarı, açıklama ekli bir işlev null ile sonlandırılan bir dize bekliyorsa ancak null olmayan sonlandırılmamış bir dize geçirirseniz de oluşturulur.
Çoğu C standart kitaplığı ve Win32 dize işleme işlevi sıfır sonlandırılan dizeler gerektirir ve üretir. Birkaç 'sayılan dize' işlevi (, wcsncpy
, , _mbsncpy
, _snprintf
ve snwprintf
dahilstrncpy
) arabelleklerini tam olarak dolduruyorsa sıfır sonlandırılan dizeler üretmez. Bu durumda, sıfır sonlandırılan bir dize bekleyen bir dize işlevine yapılan sonraki bir çağrı, sıfırı aramak için arabelleğin sonunun ötesine geçer. Program, dizenin sıfırla sona erdiğinden emin olmalıdır. Genel olarak, 'sayılan dize' işlevine arabellek boyutundan küçük bir uzunluk geçirmeniz ve ardından arabellekteki son karaktere açıkça sıfır atamanız gerekir.
Kod analizi adı: MISSING_ZERO_TERMINATION1
Örnekler
Aşağıdaki örnek kod bu uyarıyı oluşturur:
#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
}
Bu uyarıyı düzeltmek için aşağıdaki örnek kodda gösterildiği gibi dizeyi sıfır sonlandırın:
#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);
}
Aşağıdaki örnek kod, güvenli dize işleme işlevini kullanarak bu uyarıyı düzeltmektedir 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);
}
Buluşsal yöntemler
Bu uyarı bazen pratikte güvenli olması garanti edilen belirli deyimlerde bildirilir. Bu hatanın sıklığı ve olası sonuçları nedeniyle analiz aracı, gürültüyü azaltmaya yönelik tipik yanlılığı yerine olası sorunları bulma konusunda taraflıdır.