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 |