Dela via


Varning C28719

Förbjuden API-användning: funktionsnamn är osäker och har markerats som inaktuell.

Den här varningen anger att en funktion används som har förbjudits och har en mer robust eller säker ersättning.

Anmärkningar

En lista över alla förbjudna funktioner som omfattas av det här felet, varför de är förbjudna och rekommenderade ersättningar finns efter följande exempel.

Namn för kodanalys: BANNED_API_USAGE

Exempel

Följande kod genererar den här varningen:

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

Det här problemet beror på användningen av den osäkra funktionen strcpy. strcpy kontrollerar inte om målbufferten är tillräckligt stor för att passa källdata.

För att åtgärda det här problemet kan vi använda strcpy_s, C++11:s säkrare ersättning till den här funktionen. strcpy_s har en tredje parameter (storleken på målbufferten) för att endast säkerställa att många byte kopieras. Följande kod är till exempel säkrare:

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

Förbjudna funktioner

OBS! Listan uppdateras aktivt och förbättras

Förbjudet API Ersättningar Motivering/anteckningar
_fstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Äldre 16-bitars fjärrpekareimplementering
_fstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Äldre 16-bitars fjärrpekarimplementering
_fstrncat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Äldre implementering av 16-bitars fjärrpekare
_fstrncpy strncpy, wcsncpy Äldre 16-bitars farpekarimplementering
_ftccat strcat, wcscat Äldre 16-bitars farpekare-implementation
_ftccpy strcpy, wcscpy Äldre implementering av 16-bitars fjärrpekare
_ftcscat strcat, wcscat Äldre 16-bitars fjärrpekarimplementering
_ftcscpy strcpy, wcscpy Äldre 16-bitars implementering av fjärrpekare
_getts StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx, gets_s Ingen storleksgräns för data
_gettws gets_s Ingen storleksgräns för data
_getws _getws_s Ingen storleksgräns för data
_mbccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Ingen storleksgräns för data
_makepath _makepath_s Ingen storleksgräns för data
_mbscat _mbscat_s
_snprintf _snprintf_s Strängen avslutas inte med NULL
_sntprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Avslutar inte med nulltecken
_sntscanf _snscanf_s Ingen maximal längd
_snwprintf _snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Avslutar inte med NULL
_splitpath _splitpath_s Ingen gränskontroll
_stprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Begränsad felidentifiering
_stscanf sscanf_s (kräver ändringar i formatsträngen) Ingen gränskontroll
_tccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Ingen gränskontroll
_tccpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Ingen gränskontroll
_tcscat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
_tcscpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Begränsad felidentifiering
_tcsncat StringCbLength, StringCchLength, UnalignedStringCbLength, UnalignedStringCchLength Ingen maximal längd
_tcsncpy StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx Begränsad felidentifiering
_tmakepath _makepath_s Ingen gränskontroll
_tscanf scanf_s Ingen gränskontroll för utdata
_tsplitpath splitpath_s, wsplitpath_s Ingen gränskontroll
_vsnprintf _vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Begränsad felidentifiering
_vsntprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Begränsad felidentifiering
_vsnwprintf _vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx Begränsad felidentifiering
_vstprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ingen maximal längd
_wmakepath _wmakepath_s Ingen gränskontroll
_wsplitpath _wsplitpath_s Ingen gränskontroll
OemToCharW WideCharToMultiByte Ingen gränskontroll
StrCat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
StrCatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
StrCatBuff StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ingen NULL-avslutning
StrCatBuffA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ingen NULL-terminering
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Ingen NULL-terminering
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx Ingen NULL-avslutning
StrCatN StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Ingen gränskontroll
StrCatNA StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Ingen gränskontroll
StrCatNW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Ingen gränskontroll
StrCatW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Ingen gränskontroll
StrCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
StrCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
StrCpyN StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Terminerar inte med NULL
StrCpyNA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Terminerar inte med NULL
StrCpyNW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Begränsad felkontroll
strcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
StrCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
StrNCat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Begränsad felidentifiering
StrNCatA StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Begränsad felidentifiering
StrNCatW StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Begränsad felidentifiering
StrNCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Avslutar inte NULL
StrNCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Saknar NULL-avslutning
StrNCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Terminera inte med NULL
gets gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx Begränsad felidentifiering; inaktuell av C11 standard
lstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
lstrcatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
lstrcatn StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
lstrcatnA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
lstrcatnW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
lstrcatW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
lstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
lstrcpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
lstrcpyn StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Begränsad felidentifiering
lstrcpynA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Begränsad felidentifiering
lstrcpynW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
lstrcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Ingen gränskontroll
snscanf sscanf_s Ingen gränskontroll
snwscanf swscanf_s Ingen gränskontroll
sprintf sprintf_s Begränsad felidentifiering
sprintfA sprintf_s Ingen gränskontroll
sprintfW swprintf_s Ingen gränskontroll
lstrncat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Begränsad felidentifiering
makepath
nsprintf sprintf_s Ingen felidentifiering eller gränskontroll
strcat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Begränsad felidentifiering
strcatA strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Begränsad felidentifiering
strcatW strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Begränsad felidentifiering
strcpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Ingen gränskontroll
strcpyA strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Ingen gränskontroll
strncat strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx, strlcat Begränsad felidentifiering
strncpy strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, strlcpy Begränsad felidentifiering
swprintf swprintf_s StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintf, StringCbPrintfEx Begränsad felidentifiering
ualstrcpyW strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Ingen gränskontroll
vsnprintf vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Begränsad felidentifiering
vsprintf vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx, vasprintf Begränsad felidentifiering
vswprintf vswprintf_s
wcscat wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, wcslcat Begränsad felidentifiering
wcscpy wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, wcslcpy Ingen gränskontroll
wcsncat wcsncat_s, wcslcat Begränsad felidentifiering
wcsncpy wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, wcslcpy Begränsad felidentifiering
wnsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Ingen NULL-avslutning (No NULL-termination)
wnsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Ingen NULL-avslutning
wsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Ingen NULL-terminering
wsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Ingen NULL-avslutning
wsprintfW StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Ingen NULL-terminering
wvnsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ingen NULL-avslutning
wvnsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ingen NULL-terminering
wvnsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ingen NULL-avslutning
wvsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ingen NULL-avslutning
wvsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ingen avslutning med NULL
wvsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Ingen NULL-terminering