Peringatan C28719
Penggunaan API yang Dilarang: nama fungsi tidak aman dan telah ditandai tidak digunakan lagi.
Peringatan ini menunjukkan bahwa fungsi sedang digunakan yang telah dilarang dan memiliki penggantian yang lebih kuat atau aman.
Keterangan
Daftar semua fungsi terlarang yang dicakup oleh kesalahan ini, mengapa fungsi tersebut dilarang, dan penggantian yang direkomendasikan dapat ditemukan setelah contoh berikut.
Nama analisis kode: BANNED_API_USAGE
Contoh
Kode berikut menghasilkan peringatan ini:
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Masalah ini berasal dari penggunaan fungsi strcpy yang tidak aman. strcpy tidak memeriksa apakah buffer tujuan cukup besar agar sesuai dengan data sumber. Untuk memperbaiki masalah ini, kita dapat menggunakan strcpy_s, penggantian C++11 yang lebih aman untuk fungsi ini. strcpy_s memiliki parameter ketiga (ukuran buffer tujuan) untuk memastikan hanya banyak byte yang disalin. Misalnya, kode berikut lebih aman:
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
Fungsi Terlarang
CATATAN: Daftar ini sedang diperbarui dan ditingkatkan secara aktif
API Terlarang | Penggantian | Alasan / Catatan |
---|---|---|
_fstrcat |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Implementasi pointer jauh 16-bit warisan |
_fstrcpy |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Implementasi pointer jauh 16-bit warisan |
_fstrncat |
StringCbCatN , , StringCbCatNEx StringCchCatN ,StringCchCatNEx |
Implementasi pointer jauh 16-bit warisan |
_fstrncpy |
strncpy , wcsncpy |
Implementasi pointer jauh 16-bit warisan |
_ftccat |
strcat , wcscat |
Implementasi pointer jauh 16-bit warisan |
_ftccpy |
strcpy , wcscpy |
Implementasi pointer jauh 16-bit warisan |
_ftcscat |
strcat , wcscat |
Implementasi pointer jauh 16-bit warisan |
_ftcscpy |
strcpy , wcscpy |
Implementasi pointer jauh 16-bit warisan |
_getts |
StringCbGets , , StringCbGetsEx StringCchGets , , StringCchGetsEx ,gets_s |
Tidak ada batas ukuran pada data |
_gettws |
gets_s |
Tidak ada batas ukuran pada data |
_getws |
_getws_s |
Tidak ada batas ukuran pada data |
_mbccat |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx ,strlcat |
Tidak ada batas ukuran pada data |
_makepath |
_makepath_s |
Tidak ada batas ukuran pada data |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
Tidak mengakhiri NULL |
_sntprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Tidak mengakhiri NULL |
_sntscanf |
_snscanf_s |
Tidak ada panjang maksimum |
_snwprintf |
_snwprintf_s , , StringCbPrintf StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Tidak mengakhiri NULL |
_splitpath |
_splitpath_s |
Tidak ada pemeriksaan batas |
_stprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Deteksi kesalahan terbatas |
_stscanf |
sscanf_s (memerlukan perubahan string format) |
Tidak ada pemeriksaan batas |
_tccat |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx ,strlcat |
Tidak ada pemeriksaan batas |
_tccpy |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx ,strlcpy |
Tidak ada pemeriksaan batas |
_tcscat |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
_tcscpy |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Deteksi kesalahan terbatas |
_tcsncat |
StringCbLength , , StringCchLength UnalignedStringCbLength ,UnalignedStringCchLength |
Tidak ada panjang maksimum |
_tcsncpy |
StringCbCopyN , , StringCbCopyNEx StringCchCopyN ,StringCchCopyNEx |
Deteksi kesalahan terbatas |
_tmakepath |
_makepath_s |
Tidak ada pemeriksaan batas |
_tscanf |
scanf_s |
Tidak ada batasan yang memeriksa output |
_tsplitpath |
splitpath_s , wsplitpath_s |
Tidak ada pemeriksaan batas |
_vsnprintf |
_vsnprintf_s , , StringCchVPrintf StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Deteksi kesalahan terbatas |
_vsntprintf |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Deteksi kesalahan terbatas |
_vsnwprintf |
_vsnwprintf_s , , StringCbVPrintf StringCbVPrintf_l , , StringCbVPrintf_lEx ,StringCbVPrintfEx |
Deteksi kesalahan terbatas |
_vstprintf |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrinfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Tidak ada panjang maksimum |
_wmakepath |
_wmakepath_s |
Tidak ada pemeriksaan batas |
_wsplitpath |
_wsplitpath_s |
Tidak ada pemeriksaan batas |
OemToCharW |
WideCharToMultiByte |
Tidak ada pemeriksaan batas |
StrCat |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
StrCatA |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
StrCatBuff |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Tidak ada penghentian NULL |
StrCatBuffA |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Tidak ada penghentian NULL |
StrCatBuffW |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Tidak ada penghentian NULL |
StrCatChainW |
StringCbCatEx , , StringCbCatNEx StringCchCatEx ,StringCchCatNEx |
Tidak ada penghentian NULL |
StrCatN |
StringCbCat , , StringCbCatN StringCbCatEx , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Tidak ada pemeriksaan batas |
StrCatNA |
StringCbCat , , StringCbCatN StringCbCatEx , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Tidak ada pemeriksaan batas |
StrCatNW |
StringCbCat , , StringCbCatN StringCbCatEx , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Tidak ada pemeriksaan batas |
StrCatW |
StringCbCat , , StringCbCatN StringCbCatEx , StringCbCatNEx , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Tidak ada pemeriksaan batas |
StrCpy |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
StrCpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
StrCpyN |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak mengakhiri NULL |
StrCpyNA |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak mengakhiri NULL |
StrCpyNW |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Pemeriksaan kesalahan terbatas |
strcpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
StrCpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
StrNCat |
StringCbCatN , , StringCbCatNEx StringCchCatN ,StringCchCatNEx |
Deteksi kesalahan terbatas |
StrNCatA |
StringCbCatN , , StringCbCatNEx StringCchCatN ,StringCchCatNEx |
Deteksi kesalahan terbatas |
StrNCatW |
StringCbCatN , , StringCbCatNEx StringCchCatN ,StringCchCatNEx |
Deteksi kesalahan terbatas |
StrNCpy |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak mengakhiri NULL |
StrNCpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak mengakhiri NULL |
StrNCpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak mengakhiri NULL |
gets |
gets_s , , fgets StringCbGets , StringCbGetsEx , , StringCchGets ,StringCchGetsEx |
Deteksi kesalahan terbatas; tidak digunakan lagi oleh standar C11 |
lstrcat |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
lstrcatA |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
lstrcatn |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
lstrcatnA |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
lstrcatnW |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
lstrcatW |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
lstrcpy |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
lstrcpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
lstrcpyn |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Deteksi kesalahan terbatas |
lstrcpynA |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Deteksi kesalahan terbatas |
lstrcpynW |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
lstrcpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy ,StringCchCopyEx |
Tidak ada pemeriksaan batas |
snscanf |
sscanf_s |
Tidak ada pemeriksaan batas |
snwscanf |
swscanf_s |
Tidak ada pemeriksaan batas |
sprintf |
sprintf_s |
Deteksi kesalahan terbatas |
sprintfA |
sprintf_s |
Tidak ada pemeriksaan batas |
sprintfW |
swprintf_s |
Tidak ada pemeriksaan batas |
lstrncat |
StringCbCat , , StringCbCatEx StringCchCat ,StringCchCatEx |
Deteksi kesalahan terbatas |
makepath |
||
nsprintf |
sprintf_s |
Tidak ada deteksi kesalahan atau pemeriksaan batas |
strcat |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx ,strlcat |
Deteksi kesalahan terbatas |
strcatA |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx ,strlcat |
Deteksi kesalahan terbatas |
strcatW |
strcat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx ,strlcat |
Deteksi kesalahan terbatas |
strcpy |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx ,strlcpy |
Tidak ada pemeriksaan batas |
strcpyA |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx ,strlcpy |
Tidak ada pemeriksaan batas |
strncat |
strncat_s , , StringCbCatN StringCbCatNEx , StringCchCatN , , StringCchCatNEx ,strlcat |
Deteksi kesalahan terbatas |
strncpy |
strncpy_s , , StringCbCopyN StringCbCopyNEx , StringCchCopyN , , StringCchCopyNEx ,strlcpy |
Deteksi kesalahan terbatas |
swprintf |
swprintf_s StringCbPrintf , , StringCbPrintf_lEx StringCbPrintf_l , , StringCbPrintf ,StringCbPrintfEx |
Deteksi kesalahan terbatas |
ualstrcpyW |
strcpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx ,strlcpy |
Tidak ada pemeriksaan batas |
vsnprintf |
vsnprintf_s , , StringCbVPrintf_l StringCbVPrintf , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Deteksi kesalahan terbatas |
vsprintf |
vsprintf_s , , StringCbVPrintf StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , , StringCchVPrintfEx ,vasprintf |
Deteksi kesalahan terbatas |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s , , StringCbCat StringCbCatEx , StringCchCat , , StringCchCatEx ,wcslcat |
Deteksi kesalahan terbatas |
wcscpy |
wcscpy_s , , StringCbCopy StringCbCopyEx , StringCchCopy , , StringCchCopyEx ,wcslcpy |
Tidak ada pemeriksaan batas |
wcsncat |
wcsncat_s , wcslcat |
Deteksi kesalahan terbatas |
wcsncpy |
wcsncpy_s , , StringCbCopyN StringCbCopyNEx , StringCchCopyN , , StringCchCopyNEx ,wcslcpy |
Deteksi kesalahan terbatas |
wnsprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Tidak ada penghentian NULL |
wnsprintfA |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Tidak ada penghentian NULL |
wsprintf |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Tidak ada penghentian NULL |
wsprintfA |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Tidak ada penghentian NULL |
wsprintfW |
StringCbPrintf , , StringCbPrintf_l StringCbPrintf_lEx , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Tidak ada penghentian NULL |
wvnsprintf |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Tidak ada penghentian NULL |
wvnsprintfA |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Tidak ada penghentian NULL |
wvnsprintfW |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Tidak ada penghentian NULL |
wvsprintf |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Tidak ada penghentian NULL |
wvsprintfA |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Tidak ada penghentian NULL |
wvsprintfW |
StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Tidak ada penghentian NULL |