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 |