Aviso C28719
Uso de API banido: o nome da função é inseguro e foi marcado como obsoleto.
O aviso indica que está sendo usada uma função que foi banida 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 foram banidas 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 seguinte código gera esse aviso:
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Esse problema decorre do uso 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 o 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 que apenas 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á sendo atualizada e aprimorada ativamente
API proibida | Substituição(ões) | Justificativa/Notas |
---|---|---|
_fstrcat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Implementação de ponteiro distante herdado de 16 bits |
_fstrcpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Implementação de ponteiro distante herdado de 16 bits |
_fstrncat |
StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx |
Implementação de ponteiro distante herdado de 16 bits |
_fstrncpy |
strncpy , wcsncpy |
Implementação de ponteiro distante herdado de 16 bits |
_ftccat |
strcat , wcscat |
Implementação de ponteiro distante herdado de 16 bits |
_ftccpy |
strcpy , wcscpy |
Implementação de ponteiro distante herdado de 16 bits |
_ftcscat |
strcat , wcscat |
Implementação de ponteiro distante herdado de 16 bits |
_ftcscpy |
strcpy , wcscpy |
Implementação de ponteiro distante herdado de 16 bits |
_getts |
StringCbGets , StringCbGetsEx , StringCchGets , StringCchGetsEx , gets_s |
Sem limite de tamanho nos dados |
_gettws |
gets_s |
Sem limite de tamanho nos dados |
_getws |
_getws_s |
Sem limite de tamanho nos dados |
_mbccat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , , strlcat |
Sem limite de tamanho nos dados |
_makepath |
_makepath_s |
Sem limite de tamanho nos dados |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
Não termina em NULL |
_sntprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , , StringCchPrintfEx |
Não termina em NULL |
_sntscanf |
_snscanf_s |
Sem comprimento máximo |
_snwprintf |
_snwprintf_s , StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , , StringCchPrintfEx |
Não termina em NULL |
_splitpath |
_splitpath_s |
Sem verificação de limites |
_stprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , , StringCchPrintfEx |
Detecção limitada de erros |
_stscanf |
sscanf_s (requer alterações de 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 |
Detecção limitada de erros |
_tcscpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Detecção limitada de erros |
_tcsncat |
StringCbLength , StringCchLength , UnalignedStringCbLength , UnalignedStringCchLength |
Sem comprimento máximo |
_tcsncpy |
StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx |
Detecção limitada de erros |
_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 |
Detecção limitada de erros |
_vsntprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , , StringCchVPrintf_lEx , , StringCchVPrintfEx |
Detecção limitada de erros |
_vsnwprintf |
_vsnwprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx |
Detecção limitada de erros |
_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 |
Detecção limitada de erros |
StrCatA |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
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 |
Sem 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 em NULL |
StrCpyNW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Verificação limitada de erros |
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 |
Detecção limitada de erros |
StrNCatA |
StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx |
Detecção limitada de erros |
StrNCatW |
StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx |
Detecção limitada de erros |
StrNCpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Não termina em NULL |
StrNCpyA |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Não termina em NULL |
StrNCpyW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Não termina em NULL |
gets |
gets_s , fgets , StringCbGets , StringCbGetsEx , StringCchGets , , StringCchGetsEx |
Detecção limitada de erros; obsoleto pelo padrão C11 |
lstrcat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
lstrcatA |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
lstrcatn |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
lstrcatnA |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
lstrcatnW |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
lstrcatW |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
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 |
Detecção limitada de erros |
lstrcpynA |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Detecção limitada de erros |
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 |
Detecção limitada de erros |
sprintfA |
sprintf_s |
Sem verificação de limites |
sprintfW |
swprintf_s |
Sem verificação de limites |
lstrncat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Detecção limitada de erros |
makepath |
||
nsprintf |
sprintf_s |
Sem detecção de erros ou verificação de limites |
strcat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , , strlcat |
Detecção limitada de erros |
strcatA |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , , strlcat |
Detecção limitada de erros |
strcatW |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , , strlcat |
Detecção limitada de erros |
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 |
Detecção limitada de erros |
strncpy |
strncpy_s , StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx , , strlcpy |
Detecção limitada de erros |
swprintf |
swprintf_s StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintf ,StringCbPrintfEx |
Detecção limitada de erros |
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 |
Detecção limitada de erros |
vsprintf |
vsprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx StringCchVPrintfEx StringCchVPrintf StringCchVPrintf_l StringCchVPrintf_lEx ,vasprintf |
Detecção limitada de erros |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , , wcslcat |
Detecção limitada de erros |
wcscpy |
wcscpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , , wcslcpy |
Sem verificação de limites |
wcsncat |
wcsncat_s , wcslcat |
Detecção limitada de erros |
wcsncpy |
wcsncpy_s , StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx , , wcslcpy |
Detecção limitada de erros |
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 |