Partilhar via


Aviso C28719

Uso proibido da API: a função de nome é insegura e foi sinalizada como obsoleta.

Este aviso indica que está a ser utilizada uma função que foi proibida e que tem uma substituição mais robusta ou segura.

Comentários

Uma lista de todas as funções proibidas cobertas por esse erro, por que elas são proibidas e substituições recomendadas pode ser encontrada após o exemplo a seguir.

Nome da análise de código: BANNED_API_USAGE

Exemplo

O código a seguir gera esse aviso:

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

Este problema decorre da utilização da função insegura strcpy. strcpy não verifica se o buffer de destino é grande o suficiente para caber nos dados de origem.

Para corrigir esse problema, podemos usar strcpy_s, a substituição mais segura do C++11 para essa função. strcpy_s tem um terceiro parâmetro (o tamanho do buffer de destino) para garantir apenas que muitos bytes sejam copiados. Por exemplo, o código a seguir é mais seguro:

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

Funções proibidas

NOTA: Esta lista está a ser ativamente atualizada e melhorada

API banida Substituição(ões) Fundamentação / Notas
_fstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Implementação herdada de ponteiro "far" de 16 bits
_fstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Implementação herdada de ponteiro distante de 16 bits
_fstrncat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Implementação herdada de ponteiro distante de 16 bits
_fstrncpy strncpy, wcsncpy Implementação de ponteiro distante de 16 bits herdada
_ftccat strcat, wcscat Implementação de ponteiro longínquo herdada de 16 bits
_ftccpy strcpy, wcscpy Implementação herdada de ponteiro longínquo de 16 bits
_ftcscat strcat, wcscat Implementação herdada de ponteiro distante de 16 bits
_ftcscpy strcpy, wcscpy Implementação herdada de ponteiro distante de 16 bits
_getts StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx, gets_s Sem limite de tamanho para os dados
_gettws gets_s Sem limite de tamanho para os dados
_getws _getws_s Sem limite de tamanho para os dados
_mbccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Sem limite de tamanho para os dados
_makepath _makepath_s Sem limite de tamanho para os dados
_mbscat _mbscat_s
_snprintf _snprintf_s Não termina com NULL
_sntprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Não adiciona terminador NULL
_sntscanf _snscanf_s Sem comprimento máximo
_snwprintf _snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Não termina com um caractere NULL
_splitpath _splitpath_s Sem verificação de limites
_stprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Deteção de erros limitada
_stscanf sscanf_s (requer alterações na cadeia de caracteres de formato) Sem verificação de limites
_tccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Sem verificação de limites
_tccpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sem verificação de limites
_tcscat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
_tcscpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Deteção de erros limitada
_tcsncat StringCbLength, StringCchLength, UnalignedStringCbLength, UnalignedStringCchLength Sem comprimento máximo
_tcsncpy StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx Deteção de erros limitada
_tmakepath _makepath_s Sem verificação de limites
_tscanf scanf_s Sem verificação de limites para saídas
_tsplitpath splitpath_s, wsplitpath_s Sem verificação de limites
_vsnprintf _vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Deteção de erros limitada
_vsntprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Deteção de erros limitada
_vsnwprintf _vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx Deteção de erros limitada
_vstprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sem comprimento máximo
_wmakepath _wmakepath_s Sem verificação de limites
_wsplitpath _wsplitpath_s Sem verificação de limites
OemToCharW WideCharToMultiByte Sem verificação de limites
StrCat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
StrCatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
StrCatBuff StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sem terminação NULL
StrCatBuffA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sem terminação NULL
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sem terminação NULL
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx Não há terminação NULL
StrCatN StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sem verificação de limites
StrCatNA StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sem verificação de limites
StrCatNW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sem verificação de limites
StrCatW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx Sem verificação de limites
StrCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrCpyN StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina em NULL
StrCpyNA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina com um caractere NULL
StrCpyNW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Verificação de erros limitada
strcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrNCat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Deteção de erros limitada
StrNCatA StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Deteção de erros limitada
StrNCatW StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Deteção de erros limitada
StrNCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina com o caráter NULL
StrNCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina com NULL
StrNCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina com NULL
gets gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx Deteção de erros limitada; preterido pelo padrão C11
lstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
lstrcatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
lstrcatn StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
lstrcatnA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
lstrcatnW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
lstrcatW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
lstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
lstrcpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
lstrcpyn StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Deteção de erros limitada
lstrcpynA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Deteção de erros limitada
lstrcpynW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
lstrcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
snscanf sscanf_s Sem verificação de limites
snwscanf swscanf_s Sem verificação de limites
sprintf sprintf_s Deteção de erros limitada
sprintfA sprintf_s Sem verificação de limites
sprintfW swprintf_s Sem verificação de limites
lstrncat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Deteção de erros limitada
makepath
nsprintf sprintf_s Sem deteção de erros ou verificação de limites
strcat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Deteção de erros limitada
strcatA strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Deteção de erros limitada
strcatW strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat Deteção de erros limitada
strcpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sem verificação de limites
strcpyA strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sem verificação de limites
strncat strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx, strlcat Deteção de erros limitada
strncpy strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, strlcpy Deteção de erros limitada
swprintf swprintf_s StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintf, StringCbPrintfEx Deteção de erros limitada
ualstrcpyW strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy Sem verificação de limites
vsnprintf vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Deteção de erros limitada
vsprintf vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx, vasprintf Deteção de erros limitada
vswprintf vswprintf_s
wcscat wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, wcslcat Deteção de erros limitada
wcscpy wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, wcslcpy Sem verificação de limites
wcsncat wcsncat_s, wcslcat Deteção de erros limitada
wcsncpy wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, wcslcpy Deteção de erros limitada
wnsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Sem terminação NULL
wnsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Sem terminação NULL
wsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Sem terminação NULL
wsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Sem terminação NULL
wsprintfW StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx Sem terminação NULL
wvnsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sem terminação NULL
wvnsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sem terminação NULL
wvnsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sem terminação NULL
wvsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sem terminação NULL
wvsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sem terminação NULL
wvsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Sem terminação NULL