Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
Komentar
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 yang tidak aman strcpy.
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 warisan penunjuk jauh 16-bit |
_fstrcpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Penerapan penunjuk jauh 16-bit warisan |
_fstrncat |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Implementasi pointer jauh 16-bit versi lama |
_fstrncpy |
strncpy, wcsncpy |
Implementasi penunjuk 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 warisan far pointer 16-bit |
_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 dengan NULL |
_sntprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Tidak diakhiri dengan karakter NULL |
_sntscanf |
_snscanf_s |
Tidak ada panjang maksimum |
_snwprintf |
_snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Tidak menambahkan karakter NULL di akhir |
_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 pemeriksaan batas untuk 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_l, StringCbVPrintf_lEx, 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_l, StringCbVPrintf_lEx, 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 akhir null pada string |
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 karakter akhir NULL |
StrCatN |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Tidak ada pemeriksaan batas |
StrCatNA |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Tidak ada pemeriksaan batas |
StrCatNW |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Tidak ada pemeriksaan batas |
StrCatW |
StringCbCat, StringCbCatEx, StringCbCatN, 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 diakhiri dengan NULL |
StrCpyNA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Tidak diakhiri dengan karakter 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 diakhiri dengan karakter 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_l, StringCbPrintf_lEx, StringCbPrintf, StringCbPrintfEx |
Deteksi kesalahan terbatas |
ualstrcpyW |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Tidak ada pemeriksaan batas |
vsnprintf |
vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, 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 penutup NULL |
wnsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Tanpa terminasi NULL |
wsprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Tidak ada penutup NULL |
wsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Tidak ada penyudahan NULL |
wsprintfW |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Tidak ada penyudah NULL |
wvnsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Tidak ada terminasi NULL |
wvnsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Tidak ada penghentian NULL |
wvnsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Tidak ada penutupan dengan karakter NULL |
wvsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Tidak ada pengakhiran NULL |
wvsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Tidak ada pemutusan null |
wvsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Tidak ada terminasi NULL |