Compartir vía


Advertencia C28719

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