Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Uso de API prohibida: el nombre de función no es seguro y se ha marcado como en desuso.
Esta advertencia indica que se está usando una función que se ha prohibido y tiene un reemplazo más sólido o seguro.
Comentarios
Una lista de todas las funciones prohibidas cubiertas por este error, por qué están prohibidas y los reemplazos recomendados se pueden encontrar después del ejemplo siguiente.
Nombre del análisis de código: BANNED_API_USAGE
Ejemplo
El código siguiente genera esta advertencia:
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Este problema se deriva del uso de la función no segura strcpy. strcpy no comprueba si el búfer de destino es lo suficientemente grande como para ajustarse a los datos de origen. Para corregir este problema, podemos usar strcpy_s, el reemplazo más seguro de C++11 para esta función. strcpy_s tiene un tercer parámetro (el tamaño del búfer de destino) para asegurarse de que solo se copian muchos bytes. Por ejemplo, el código siguiente es más seguro:
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
Funciones prohibidas
NOTA: Esta lista se está actualizando y mejorando activamente
| API prohibida | Sustituciones | Justificación y notas |
|---|---|---|
_fstrcat |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Implementación heredada del puntero lejano de 16 bits |
_fstrcpy |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Implementación heredada del puntero lejano de 16 bits |
_fstrncat |
StringCbCatN, StringCbCatNEx, , StringCchCatN, StringCchCatNEx |
Implementación heredada del puntero lejano de 16 bits |
_fstrncpy |
strncpy, wcsncpy |
Implementación heredada del puntero lejano de 16 bits |
_ftccat |
strcat, wcscat |
Implementación heredada del puntero lejano de 16 bits |
_ftccpy |
strcpy, wcscpy |
Implementación heredada del puntero lejano de 16 bits |
_ftcscat |
strcat, wcscat |
Implementación heredada del puntero lejano de 16 bits |
_ftcscpy |
strcpy, wcscpy |
Implementación heredada del puntero lejano de 16 bits |
_getts |
StringCbGets, StringCbGetsEx, StringCchGets, , StringCchGetsEx, gets_s |
Sin límite de tamaño en los datos |
_gettws |
gets_s |
Sin límite de tamaño en los datos |
_getws |
_getws_s |
Sin límite de tamaño en los datos |
_mbccat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, , StringCchCatEx, strlcat |
Sin límite de tamaño en los datos |
_makepath |
_makepath_s |
Sin límite de tamaño en los datos |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
No finaliza NULL |
_sntprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf, StringCchPrintfEx |
No finaliza NULL |
_sntscanf |
_snscanf_s |
Sin longitud máxima |
_snwprintf |
_snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintfStringCchPrintfEx |
No finaliza NULL |
_splitpath |
_splitpath_s |
Sin comprobación de límites |
_stprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf, StringCchPrintfEx |
Detección de errores limitada |
_stscanf |
sscanf_s (requiere cambios de cadena de formato) |
Sin comprobación de límites |
_tccat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, , StringCchCatEx, strlcat |
Sin comprobación de límites |
_tccpy |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, , StringCchCopyEx, strlcpy |
Sin comprobación de límites |
_tcscat |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
_tcscpy |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Detección de errores limitada |
_tcsncat |
StringCbLength, StringCchLength, , UnalignedStringCbLength, UnalignedStringCchLength |
Sin longitud máxima |
_tcsncpy |
StringCbCopyN, StringCbCopyNEx, , StringCchCopyN, StringCchCopyNEx |
Detección de errores limitada |
_tmakepath |
_makepath_s |
Sin comprobación de límites |
_tscanf |
scanf_s |
No hay límites que comprueben las salidas |
_tsplitpath |
splitpath_s, wsplitpath_s |
Sin comprobación de límites |
_vsnprintf |
_vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, StringCchVPrintfEx |
Detección de errores limitada |
_vsntprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Detección de errores limitada |
_vsnwprintf |
_vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, , StringCbVPrintf_lEx, StringCbVPrintfEx |
Detección de errores limitada |
_vstprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Sin longitud máxima |
_wmakepath |
_wmakepath_s |
Sin comprobación de límites |
_wsplitpath |
_wsplitpath_s |
Sin comprobación de límites |
OemToCharW |
WideCharToMultiByte |
Sin comprobación de límites |
StrCat |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
StrCatA |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
StrCatBuff |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Sin terminación NULL |
StrCatBuffA |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Sin terminación NULL |
StrCatBuffW |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Sin terminación NULL |
StrCatChainW |
StringCbCatEx, StringCbCatNEx, , StringCchCatEx, StringCchCatNEx |
Sin terminación NULL |
StrCatN |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx |
Sin comprobación de límites |
StrCatNA |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx |
Sin comprobación de límites |
StrCatNW |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx |
Sin comprobación de límites |
StrCatW |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx |
Sin comprobación de límites |
StrCpy |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
StrCpyA |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
StrCpyN |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
No finaliza NULL |
StrCpyNA |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
No finaliza NULL |
StrCpyNW |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Comprobación de errores limitada |
strcpyW |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
StrCpyW |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
StrNCat |
StringCbCatN, StringCbCatNEx, , StringCchCatN, StringCchCatNEx |
Detección de errores limitada |
StrNCatA |
StringCbCatN, StringCbCatNEx, , StringCchCatN, StringCchCatNEx |
Detección de errores limitada |
StrNCatW |
StringCbCatN, StringCbCatNEx, , StringCchCatN, StringCchCatNEx |
Detección de errores limitada |
StrNCpy |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
No finaliza NULL |
StrNCpyA |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
No finaliza NULL |
StrNCpyW |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
No finaliza NULL |
gets |
gets_s, fgets, StringCbGets, StringCbGetsEx, , StringCchGets, StringCchGetsEx |
Detección limitada de errores; en desuso por el estándar C11 |
lstrcat |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
lstrcatA |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
lstrcatn |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
lstrcatnA |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
lstrcatnW |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
lstrcatW |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
lstrcpy |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
lstrcpyA |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
lstrcpyn |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Detección de errores limitada |
lstrcpynA |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Detección de errores limitada |
lstrcpynW |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
lstrcpyW |
StringCbCopy, StringCbCopyEx, , StringCchCopy, StringCchCopyEx |
Sin comprobación de límites |
snscanf |
sscanf_s |
Sin comprobación de límites |
snwscanf |
swscanf_s |
Sin comprobación de límites |
sprintf |
sprintf_s |
Detección de errores limitada |
sprintfA |
sprintf_s |
Sin comprobación de límites |
sprintfW |
swprintf_s |
Sin comprobación de límites |
lstrncat |
StringCbCat, StringCbCatEx, , StringCchCat, StringCchCatEx |
Detección de errores limitada |
makepath |
||
nsprintf |
sprintf_s |
No hay detección de errores ni comprobación de límites |
strcat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, , StringCchCatEx, strlcat |
Detección de errores limitada |
strcatA |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, , StringCchCatEx, strlcat |
Detección de errores limitada |
strcatW |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, , StringCchCatEx, strlcat |
Detección de errores limitada |
strcpy |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, , StringCchCopyEx, strlcpy |
Sin comprobación de límites |
strcpyA |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, , StringCchCopyEx, strlcpy |
Sin comprobación de límites |
strncat |
strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, , StringCchCatNEx, strlcat |
Detección de errores limitada |
strncpy |
strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, , StringCchCopyNEx, strlcpy |
Detección de errores limitada |
swprintf |
swprintf_sStringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, , StringCbPrintf,StringCbPrintfEx |
Detección de errores limitada |
ualstrcpyW |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, , StringCchCopyEx, strlcpy |
Sin comprobación de límites |
vsnprintf |
vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Detección de errores limitada |
vsprintf |
vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, , StringCchVPrintfExvasprintf |
Detección de errores limitada |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, , StringCchCatEx, wcslcat |
Detección de errores limitada |
wcscpy |
wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, , StringCchCopyEx, wcslcpy |
Sin comprobación de límites |
wcsncat |
wcsncat_s, wcslcat |
Detección de errores limitada |
wcsncpy |
wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, , StringCchCopyNEx, wcslcpy |
Detección de errores limitada |
wnsprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf, StringCchPrintfEx |
Sin terminación NULL |
wnsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf, StringCchPrintfEx |
Sin terminación NULL |
wsprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf, StringCchPrintfEx |
Sin terminación NULL |
wsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf, StringCchPrintfEx |
Sin terminación NULL |
wsprintfW |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, , StringCchPrintf, StringCchPrintfEx |
Sin terminación NULL |
wvnsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Sin terminación NULL |
wvnsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Sin terminación NULL |
wvnsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Sin terminación NULL |
wvsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Sin terminación NULL |
wvsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Sin terminación NULL |
wvsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx |
Sin terminación NULL |