Udostępnij za pośrednictwem


Ostrzeżenie C28719

Użycie zakazanego interfejsu API: nazwa-funkcji jest niebezpieczna i została oznaczona jako wycofana.

To ostrzeżenie wskazuje, że używana jest funkcja, która została zakazana i ma bardziej niezawodny lub bezpieczny zamiennik.

Uwagi

Lista wszystkich zakazanych funkcji objętych tym błędem, dlaczego są one zakazane i zalecane zamienniki można znaleźć po poniższym przykładzie.

Nazwa analizy kodu: BANNED_API_USAGE

Przykład

Następujący kod generuje to ostrzeżenie:

void example_func(PSTR src) 
{ 
    char dst[100]; 
    strcpy(dst, src);
} 

Ten problem wynika z użycia niebezpiecznej funkcji strcpy. strcpy nie sprawdza, czy bufor docelowy jest wystarczająco duży, aby dopasować dane źródłowe.

Aby rozwiązać ten problem, możemy użyć strcpy_s bezpieczniejszego zastąpienia tej funkcji języka C++11. strcpy_s ma trzeci parametr (rozmiar buforu docelowego), aby zapewnić skopiowanie tylko wielu bajtów. Na przykład następujący kod jest bezpieczniejszy:

void example_func(PSTR src) 
{ 
    char dst[100]; 
    strcpy_s(dst, sizeof(dst), src); 
}

Funkcje zakazane

UWAGA: ta lista jest aktywnie aktualizowana i ulepszana

Zablokowane API Zastąpienie Uzasadnienie/uwagi
_fstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Starsza implementacja wskaźnika 16-bitowego dalekiego
_fstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Starsza implementacja 16-bitowego wskaźnika dalekiego
_fstrncat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Starsza implementacja 16-bitowego dalekiego wskaźnika
_fstrncpy strncpy, wcsncpy Starsza implementacja wskaźnika 16-bitowego
_ftccat strcat, wcscat Starsza implementacja wskaźnika 16-bitowego
_ftccpy strcpy, wcscpy Starsza implementacja wskaźnika dalekiego 16-bitowego
_ftcscat strcat, wcscat Starsza implementacja wskaźnika dalekiego 16-bitowego
_ftcscpy strcpy, wcscpy Starsza implementacja wskaźnika dalekiego 16-bitowego
_getts StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx, gets_s Brak limitu rozmiaru danych
_gettws gets_s Brak limitu rozmiaru danych
_getws _getws_s Brak limitu rozmiaru danych
_mbccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Brak limitu rozmiaru danych
_makepath _makepath_s Brak limitu rozmiaru danych
_mbscat _mbscat_s
_snprintf _snprintf_s Nie kończy się znakiem NULL
_sntprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Nie kończy znakiem NULL
_sntscanf _snscanf_s Brak maksymalnej długości
_snwprintf _snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Nie kończy znakiem NULL
_splitpath _splitpath_s Bez sprawdzania granic
_stprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Ograniczone wykrywanie błędów
_stscanf sscanf_s (wymaga zmian ciągu formatu) Bez sprawdzania granic
_tccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Bez sprawdzania granic
_tccpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Bez sprawdzania granic
_tcscat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
_tcscpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ograniczone wykrywanie błędów
_tcsncat StringCbLength, StringCchLength, UnalignedStringCbLength, UnalignedStringCchLength Brak maksymalnej długości
_tcsncpy StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx Ograniczone wykrywanie błędów
_tmakepath _makepath_s Bez sprawdzania granic
_tscanf scanf_s Brak sprawdzania granic dla danych wyjściowych
_tsplitpath splitpath_s, wsplitpath_s Bez sprawdzania granic
_vsnprintf _vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ograniczone wykrywanie błędów
_vsntprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ograniczone wykrywanie błędów
_vsnwprintf _vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx Ograniczone wykrywanie błędów
_vstprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Brak maksymalnej długości
_wmakepath _wmakepath_s Bez sprawdzania granic
_wsplitpath _wsplitpath_s Bez sprawdzania granic
OemToCharW WideCharToMultiByte Bez sprawdzania granic
StrCat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
StrCatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
StrCatBuff StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Brak zakończenia NULL
StrCatBuffA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Brak zakończenia za pomocą NULL
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Brak zakończenia za pomocą NULL
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx Brak zakończenia znakiem NULL
StrCatN StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Bez sprawdzania granic
StrCatNA StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Bez sprawdzania granic
StrCatNW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Bez sprawdzania granic
StrCatW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Bez sprawdzania granic
StrCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
StrCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
StrCpyN StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Nie kończy łańcucha znakiem NULL
StrCpyNA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Nie zakończa symbolem NULL
StrCpyNW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ograniczone sprawdzanie błędów
strcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
StrCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
StrNCat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Ograniczone wykrywanie błędów
StrNCatA StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Ograniczone wykrywanie błędów
StrNCatW StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Ograniczone wykrywanie błędów
StrNCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Nie kończy znakiem NULL
StrNCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Nie kończy się NULL
StrNCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Nie dodaje znaku kończącego NULL
gets gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx Ograniczone wykrywanie błędów; zdezaktualizowane przez standard C11
lstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
lstrcatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
lstrcatn StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
lstrcatnA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
lstrcatnW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
lstrcatW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
lstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
lstrcpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
lstrcpyn StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ograniczone wykrywanie błędów
lstrcpynA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ograniczone wykrywanie błędów
lstrcpynW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
lstrcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Bez sprawdzania granic
snscanf sscanf_s Bez sprawdzania granic
snwscanf swscanf_s Bez sprawdzania granic
sprintf sprintf_s Ograniczone wykrywanie błędów
sprintfA sprintf_s Bez sprawdzania granic
sprintfW swprintf_s Bez sprawdzania granic
lstrncat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ograniczone wykrywanie błędów
makepath
nsprintf sprintf_s Brak wykrywania błędów ani sprawdzania granic
strcat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Ograniczone wykrywanie błędów
strcatA strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Ograniczone wykrywanie błędów
strcatW strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Ograniczone wykrywanie błędów
strcpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Bez sprawdzania granic
strcpyA strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Bez sprawdzania granic
strncat strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx, strlcat Ograniczone wykrywanie błędów
strncpy strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, strlcpy Ograniczone wykrywanie błędów
swprintf swprintf_s StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintf, StringCbPrintfEx Ograniczone wykrywanie błędów
ualstrcpyW strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Bez sprawdzania granic
vsnprintf vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ograniczone wykrywanie błędów
vsprintf vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx, vasprintf Ograniczone wykrywanie błędów
vswprintf vswprintf_s
wcscat wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, wcslcat Ograniczone wykrywanie błędów
wcscpy wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, wcslcpy Bez sprawdzania granic
wcsncat wcsncat_s, wcslcat Ograniczone wykrywanie błędów
wcsncpy wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, wcslcpy Ograniczone wykrywanie błędów
wnsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Brak zakończenia znakiem NULL
wnsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Brak zakończenia za pomocą NULL
wsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Brak zakończenia NULL
wsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Brak zakończenia znakami NULL
wsprintfW StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Brak zakończenia znakiem NULL
wvnsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Brak znaku kończącego NULL
wvnsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Brak zakończenia zerowym bajtem
wvnsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Brak zakończenia NULL
wvsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Brak zakończenia znakiem NULL
wvsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Brak zakończenia znakiem NULL
wvsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Brak zakończenia znakiem NULL