Bagikan melalui


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, , StringCbCatExStringCchCat,StringCchCatEx Implementasi pointer jauh 16-bit warisan
_fstrcpy StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Implementasi pointer jauh 16-bit warisan
_fstrncat StringCbCatN, , StringCbCatNExStringCchCatN,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, , StringCbGetsExStringCchGets, , 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, , StringCbCatStringCbCatEx, 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_lStringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Tidak mengakhiri NULL
_sntscanf _snscanf_s Tidak ada panjang maksimum
_snwprintf _snwprintf_s, , StringCbPrintfStringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Tidak mengakhiri NULL
_splitpath _splitpath_s Tidak ada pemeriksaan batas
_stprintf StringCbPrintf, , StringCbPrintf_lStringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Deteksi kesalahan terbatas
_stscanf sscanf_s (memerlukan perubahan string format) Tidak ada pemeriksaan batas
_tccat strcat_s, , StringCbCatStringCbCatEx, StringCchCat, , StringCchCatEx,strlcat Tidak ada pemeriksaan batas
_tccpy strcpy_s, , StringCbCopyStringCbCopyEx, StringCchCopy, , StringCchCopyEx,strlcpy Tidak ada pemeriksaan batas
_tcscat StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
_tcscpy StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Deteksi kesalahan terbatas
_tcsncat StringCbLength, , StringCchLengthUnalignedStringCbLength,UnalignedStringCchLength Tidak ada panjang maksimum
_tcsncpy StringCbCopyN, , StringCbCopyNExStringCchCopyN,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, , StringCchVPrintfStringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Deteksi kesalahan terbatas
_vsntprintf StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_l, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Deteksi kesalahan terbatas
_vsnwprintf _vsnwprintf_s, , StringCbVPrintfStringCbVPrintf_l, , StringCbVPrintf_lEx,StringCbVPrintfEx Deteksi kesalahan terbatas
_vstprintf StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_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, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
StrCatA StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
StrCatBuff StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Tidak ada penghentian NULL
StrCatBuffA StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Tidak ada penghentian NULL
StrCatBuffW StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Tidak ada penghentian NULL
StrCatChainW StringCbCatEx, , StringCbCatNExStringCchCatEx,StringCchCatNEx Tidak ada penghentian NULL
StrCatN StringCbCat, , StringCbCatNStringCbCatEx, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN,StringCchCatNEx Tidak ada pemeriksaan batas
StrCatNA StringCbCat, , StringCbCatNStringCbCatEx, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN,StringCchCatNEx Tidak ada pemeriksaan batas
StrCatNW StringCbCat, , StringCbCatNStringCbCatEx, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN,StringCchCatNEx Tidak ada pemeriksaan batas
StrCatW StringCbCat, , StringCbCatNStringCbCatEx, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN,StringCchCatNEx Tidak ada pemeriksaan batas
StrCpy StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak ada pemeriksaan batas
StrCpyA StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak ada pemeriksaan batas
StrCpyN StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak mengakhiri NULL
StrCpyNA StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak mengakhiri NULL
StrCpyNW StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Pemeriksaan kesalahan terbatas
strcpyW StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak ada pemeriksaan batas
StrCpyW StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak ada pemeriksaan batas
StrNCat StringCbCatN, , StringCbCatNExStringCchCatN,StringCchCatNEx Deteksi kesalahan terbatas
StrNCatA StringCbCatN, , StringCbCatNExStringCchCatN,StringCchCatNEx Deteksi kesalahan terbatas
StrNCatW StringCbCatN, , StringCbCatNExStringCchCatN,StringCchCatNEx Deteksi kesalahan terbatas
StrNCpy StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak mengakhiri NULL
StrNCpyA StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak mengakhiri NULL
StrNCpyW StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak mengakhiri NULL
gets gets_s, , fgetsStringCbGets, StringCbGetsEx, , StringCchGets,StringCchGetsEx Deteksi kesalahan terbatas; tidak digunakan lagi oleh standar C11
lstrcat StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
lstrcatA StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
lstrcatn StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
lstrcatnA StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
lstrcatnW StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
lstrcatW StringCbCat, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
lstrcpy StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak ada pemeriksaan batas
lstrcpyA StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak ada pemeriksaan batas
lstrcpyn StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Deteksi kesalahan terbatas
lstrcpynA StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Deteksi kesalahan terbatas
lstrcpynW StringCbCopy, , StringCbCopyExStringCchCopy,StringCchCopyEx Tidak ada pemeriksaan batas
lstrcpyW StringCbCopy, , StringCbCopyExStringCchCopy,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, , StringCbCatExStringCchCat,StringCchCatEx Deteksi kesalahan terbatas
makepath
nsprintf sprintf_s Tidak ada deteksi kesalahan atau pemeriksaan batas
strcat strcat_s, , StringCbCatStringCbCatEx, StringCchCat, , StringCchCatEx,strlcat Deteksi kesalahan terbatas
strcatA strcat_s, , StringCbCatStringCbCatEx, StringCchCat, , StringCchCatEx,strlcat Deteksi kesalahan terbatas
strcatW strcat_s, , StringCbCatStringCbCatEx, StringCchCat, , StringCchCatEx,strlcat Deteksi kesalahan terbatas
strcpy strcpy_s, , StringCbCopyStringCbCopyEx, StringCchCopy, , StringCchCopyEx,strlcpy Tidak ada pemeriksaan batas
strcpyA strcpy_s, , StringCbCopyStringCbCopyEx, StringCchCopy, , StringCchCopyEx,strlcpy Tidak ada pemeriksaan batas
strncat strncat_s, , StringCbCatNStringCbCatNEx, StringCchCatN, , StringCchCatNEx,strlcat Deteksi kesalahan terbatas
strncpy strncpy_s, , StringCbCopyNStringCbCopyNEx, StringCchCopyN, , StringCchCopyNEx,strlcpy Deteksi kesalahan terbatas
swprintf swprintf_sStringCbPrintf, , StringCbPrintf_lExStringCbPrintf_l, , StringCbPrintf,StringCbPrintfEx Deteksi kesalahan terbatas
ualstrcpyW strcpy_s, , StringCbCopyStringCbCopyEx, StringCchCopy, , StringCchCopyEx,strlcpy Tidak ada pemeriksaan batas
vsnprintf vsnprintf_s, , StringCbVPrintf_lStringCbVPrintf, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Deteksi kesalahan terbatas
vsprintf vsprintf_s, , StringCbVPrintfStringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, , StringCchVPrintfEx,vasprintf Deteksi kesalahan terbatas
vswprintf vswprintf_s
wcscat wcscat_s, , StringCbCatStringCbCatEx, StringCchCat, , StringCchCatEx,wcslcat Deteksi kesalahan terbatas
wcscpy wcscpy_s, , StringCbCopyStringCbCopyEx, StringCchCopy, , StringCchCopyEx,wcslcpy Tidak ada pemeriksaan batas
wcsncat wcsncat_s, wcslcat Deteksi kesalahan terbatas
wcsncpy wcsncpy_s, , StringCbCopyNStringCbCopyNEx, StringCchCopyN, , StringCchCopyNEx,wcslcpy Deteksi kesalahan terbatas
wnsprintf StringCbPrintf, , StringCbPrintf_lStringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Tidak ada penghentian NULL
wnsprintfA StringCbPrintf, , StringCbPrintf_lStringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Tidak ada penghentian NULL
wsprintf StringCbPrintf, , StringCbPrintf_lStringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Tidak ada penghentian NULL
wsprintfA StringCbPrintf, , StringCbPrintf_lStringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Tidak ada penghentian NULL
wsprintfW StringCbPrintf, , StringCbPrintf_lStringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf,StringCchPrintfEx Tidak ada penghentian NULL
wvnsprintf StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_l, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Tidak ada penghentian NULL
wvnsprintfA StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_l, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Tidak ada penghentian NULL
wvnsprintfW StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_l, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Tidak ada penghentian NULL
wvsprintf StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_l, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Tidak ada penghentian NULL
wvsprintfA StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_l, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Tidak ada penghentian NULL
wvsprintfW StringCbVPrintf, , StringCbVPrintf_lExStringCbVPrintf_l, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx,StringCchVPrintfEx Tidak ada penghentian NULL