Avertissement C28719
Utilisation de l’API interdite : le nom de la fonction n’est pas sécurisé et a été marqué comme déconseillé.
Cet avertissement indique qu’une fonction est utilisée alors qu’elle a été interdite et qu’il existe une version plus robuste ou plus sécurisée.
Notes
Une liste de toutes les fonctions interdites couvertes par cette erreur, pourquoi elles sont interdites et les remplacements recommandés sont disponibles après l’exemple suivant.
Nom de l’analyse du code : BANNED_API_USAGE
Exemple
Le code suivant génère cet avertissement :
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Ce problème provient de l’utilisation de la fonction non sécurisée strcpy. strcpy ne vérifie pas si la mémoire tampon de destination est suffisamment grande pour s’adapter aux données sources. Pour résoudre ce problème, nous pouvons utiliser strcpy_s, le remplacement plus sûr de C++11 par cette fonction. strcpy_s a un troisième paramètre (la taille de la mémoire tampon de destination) pour vous assurer que de nombreux octets sont copiés. Par exemple, le code suivant est plus sûr :
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
Fonctions interdites
REMARQUE : Cette liste est activement mise à jour et améliorée
API interdite | Remplacement(s) | Justification / Notes |
---|---|---|
_fstrcat |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Implémentation de pointeur lointain 16 bits héritée |
_fstrcpy |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Implémentation de pointeur lointain 16 bits héritée |
_fstrncat |
StringCbCatN , , StringCbCatNEx StringCchCatN , ,StringCchCatNEx |
Implémentation de pointeur lointain 16 bits héritée |
_fstrncpy |
strncpy , wcsncpy |
Implémentation de pointeur lointain 16 bits héritée |
_ftccat |
strcat , wcscat |
Implémentation de pointeur lointain 16 bits héritée |
_ftccpy |
strcpy , wcscpy |
Implémentation de pointeur lointain 16 bits héritée |
_ftcscat |
strcat , wcscat |
Implémentation de pointeur lointain 16 bits héritée |
_ftcscpy |
strcpy , wcscpy |
Implémentation de pointeur lointain 16 bits héritée |
_getts |
StringCbGets , , StringCbGetsEx StringCchGets , , StringCchGetsEx gets_s |
Aucune limite de taille sur les données |
_gettws |
gets_s |
Aucune limite de taille sur les données |
_getws |
_getws_s |
Aucune limite de taille sur les données |
_mbccat |
strcat_s , , StringCbCat , StringCchCat StringCbCatEx , , StringCchCatEx strlcat |
Aucune limite de taille sur les données |
_makepath |
_makepath_s |
Aucune limite de taille sur les données |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
Ne se termine pas PAR NULL |
_sntprintf |
StringCbPrintf , , StringCbPrintf_l , StringCbPrintfEx StringCbPrintf_lEx , , StringCchPrintf StringCchPrintfEx |
Ne se termine pas PAR NULL |
_sntscanf |
_snscanf_s |
Aucune longueur maximale |
_snwprintf |
_snwprintf_s , StringCbPrintf , , StringCbPrintf_lEx StringCbPrintf_l , StringCbPrintfEx , , StringCchPrintf ,StringCchPrintfEx |
Ne se termine pas PAR NULL |
_splitpath |
_splitpath_s |
Aucune vérification des limites |
_stprintf |
StringCbPrintf , , StringCbPrintf_l , StringCbPrintfEx StringCbPrintf_lEx , , StringCchPrintf StringCchPrintfEx |
Détection d’erreurs limitée |
_stscanf |
sscanf_s (nécessite des modifications de chaîne de format) |
Aucune vérification des limites |
_tccat |
strcat_s , , StringCbCat , StringCchCat StringCbCatEx , , StringCchCatEx strlcat |
Aucune vérification des limites |
_tccpy |
strcpy_s , , StringCbCopy , StringCchCopy StringCbCopyEx , , StringCchCopyEx strlcpy |
Aucune vérification des limites |
_tcscat |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
_tcscpy |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Détection d’erreurs limitée |
_tcsncat |
StringCbLength , , StringCchLength UnalignedStringCbLength , ,UnalignedStringCchLength |
Aucune longueur maximale |
_tcsncpy |
StringCbCopyN , , StringCbCopyNEx StringCchCopyN , ,StringCchCopyNEx |
Détection d’erreurs limitée |
_tmakepath |
_makepath_s |
Aucune vérification des limites |
_tscanf |
scanf_s |
Aucune vérification des limites pour les sorties |
_tsplitpath |
splitpath_s , wsplitpath_s |
Aucune vérification des limites |
_vsnprintf |
_vsnprintf_s , , StringCchVPrintf StringCchVPrintf_l , , StringCchVPrintf_lEx StringCchVPrintfEx |
Détection d’erreurs limitée |
_vsntprintf |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrintfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Détection d’erreurs limitée |
_vsnwprintf |
_vsnwprintf_s , , StringCbVPrintf StringCbVPrintf_l , , StringCbVPrintf_lEx StringCbVPrintfEx |
Détection d’erreurs limitée |
_vstprintf |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrinfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Aucune longueur maximale |
_wmakepath |
_wmakepath_s |
Aucune vérification des limites |
_wsplitpath |
_wsplitpath_s |
Aucune vérification des limites |
OemToCharW |
WideCharToMultiByte |
Aucune vérification des limites |
StrCat |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
StrCatA |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
StrCatBuff |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Aucun arrêt NULL |
StrCatBuffA |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Aucun arrêt NULL |
StrCatBuffW |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Aucun arrêt NULL |
StrCatChainW |
StringCbCatEx , , StringCbCatNEx StringCchCatEx , ,StringCchCatNEx |
Aucun arrêt NULL |
StrCatN |
StringCbCat , StringCbCatEx , , StringCbCatNEx StringCbCatN , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Aucune vérification des limites |
StrCatNA |
StringCbCat , StringCbCatEx , , StringCbCatNEx StringCbCatN , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Aucune vérification des limites |
StrCatNW |
StringCbCat , StringCbCatEx , , StringCbCatNEx StringCbCatN , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Aucune vérification des limites |
StrCatW |
StringCbCat , StringCbCatEx , , StringCbCatNEx StringCbCatN , StringCchCat , StringCchCatEx , , StringCchCatN ,StringCchCatNEx |
Aucune vérification des limites |
StrCpy |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
StrCpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
StrCpyN |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Ne se termine pas PAR NULL |
StrCpyNA |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Ne se termine pas PAR NULL |
StrCpyNW |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Vérification limitée des erreurs |
strcpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
StrCpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
StrNCat |
StringCbCatN , , StringCbCatNEx StringCchCatN , ,StringCchCatNEx |
Détection d’erreurs limitée |
StrNCatA |
StringCbCatN , , StringCbCatNEx StringCchCatN , ,StringCchCatNEx |
Détection d’erreurs limitée |
StrNCatW |
StringCbCatN , , StringCbCatNEx StringCchCatN , ,StringCchCatNEx |
Détection d’erreurs limitée |
StrNCpy |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Ne se termine pas PAR NULL |
StrNCpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Ne se termine pas PAR NULL |
StrNCpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Ne se termine pas PAR NULL |
gets |
gets_s , , fgets , StringCbGetsEx StringCbGets , , StringCchGets StringCchGetsEx |
Détection limitée des erreurs ; déconseillé par la norme C11 |
lstrcat |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
lstrcatA |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
lstrcatn |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
lstrcatnA |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
lstrcatnW |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
lstrcatW |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
lstrcpy |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
lstrcpyA |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
lstrcpyn |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Détection d’erreurs limitée |
lstrcpynA |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Détection d’erreurs limitée |
lstrcpynW |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
lstrcpyW |
StringCbCopy , , StringCbCopyEx StringCchCopy , ,StringCchCopyEx |
Aucune vérification des limites |
snscanf |
sscanf_s |
Aucune vérification des limites |
snwscanf |
swscanf_s |
Aucune vérification des limites |
sprintf |
sprintf_s |
Détection d’erreurs limitée |
sprintfA |
sprintf_s |
Aucune vérification des limites |
sprintfW |
swprintf_s |
Aucune vérification des limites |
lstrncat |
StringCbCat , , StringCbCatEx StringCchCat , ,StringCchCatEx |
Détection d’erreurs limitée |
makepath |
||
nsprintf |
sprintf_s |
Aucune détection d’erreur ou vérification des limites |
strcat |
strcat_s , , StringCbCat , StringCchCat StringCbCatEx , , StringCchCatEx strlcat |
Détection d’erreurs limitée |
strcatA |
strcat_s , , StringCbCat , StringCchCat StringCbCatEx , , StringCchCatEx strlcat |
Détection d’erreurs limitée |
strcatW |
strcat_s , , StringCbCat , StringCchCat StringCbCatEx , , StringCchCatEx strlcat |
Détection d’erreurs limitée |
strcpy |
strcpy_s , , StringCbCopy , StringCchCopy StringCbCopyEx , , StringCchCopyEx strlcpy |
Aucune vérification des limites |
strcpyA |
strcpy_s , , StringCbCopy , StringCchCopy StringCbCopyEx , , StringCchCopyEx strlcpy |
Aucune vérification des limites |
strncat |
strncat_s , , StringCbCatN , StringCchCatN StringCbCatNEx , , StringCchCatNEx strlcat |
Détection d’erreurs limitée |
strncpy |
strncpy_s , , StringCbCopyN , StringCchCopyN StringCbCopyNEx , , StringCchCopyNEx strlcpy |
Détection d’erreurs limitée |
swprintf |
swprintf_s StringCbPrintf , , StringCbPrintf_lEx StringCbPrintf_l , , StringCbPrintf StringCbPrintfEx |
Détection d’erreurs limitée |
ualstrcpyW |
strcpy_s , , StringCbCopy , StringCchCopy StringCbCopyEx , , StringCchCopyEx strlcpy |
Aucune vérification des limites |
vsnprintf |
vsnprintf_s , StringCbVPrintf , , StringCbVPrintf_lEx StringCbVPrintf_l , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Détection d’erreurs limitée |
vsprintf |
vsprintf_s , , StringCbVPrintf , StringCbVPrintf_lEx StringCbVPrintf_l , , StringCchVPrintf StringCchVPrintfEx StringCchVPrintf_l StringCchVPrintf_lEx StringCbVPrintfEx vasprintf |
Détection d’erreurs limitée |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s , , StringCbCat , StringCchCat StringCbCatEx , , StringCchCatEx wcslcat |
Détection d’erreurs limitée |
wcscpy |
wcscpy_s , , StringCbCopy , StringCchCopy StringCbCopyEx , , StringCchCopyEx wcslcpy |
Aucune vérification des limites |
wcsncat |
wcsncat_s , wcslcat |
Détection d’erreurs limitée |
wcsncpy |
wcsncpy_s , , StringCbCopyN , StringCchCopyN StringCbCopyNEx , , StringCchCopyNEx wcslcpy |
Détection d’erreurs limitée |
wnsprintf |
StringCbPrintf , , StringCbPrintf_l , StringCbPrintfEx StringCbPrintf_lEx , , StringCchPrintf StringCchPrintfEx |
Aucun arrêt NULL |
wnsprintfA |
StringCbPrintf , , StringCbPrintf_l , StringCbPrintfEx StringCbPrintf_lEx , , StringCchPrintf StringCchPrintfEx |
Aucun arrêt NULL |
wsprintf |
StringCbPrintf , , StringCbPrintf_l , StringCbPrintfEx StringCbPrintf_lEx , , StringCchPrintf StringCchPrintfEx |
Aucun arrêt NULL |
wsprintfA |
StringCbPrintf , , StringCbPrintf_l , StringCbPrintfEx StringCbPrintf_lEx , , StringCchPrintf StringCchPrintfEx |
Aucun arrêt NULL |
wsprintfW |
StringCbPrintf , , StringCbPrintf_l , StringCbPrintfEx StringCbPrintf_lEx , , StringCchPrintf StringCchPrintfEx |
Aucun arrêt NULL |
wvnsprintf |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrintfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Aucun arrêt NULL |
wvnsprintfA |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrintfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Aucun arrêt NULL |
wvnsprintfW |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrintfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Aucun arrêt NULL |
wvsprintf |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrintfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Aucun arrêt NULL |
wvsprintfA |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrintfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Aucun arrêt NULL |
wvsprintfW |
StringCbVPrintf , StringCbVPrintf_l , , StringCbVPrintfEx StringCbVPrintf_lEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx ,StringCchVPrintfEx |
Aucun arrêt NULL |