Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Запрещенное использование API: имя функции небезопасно и помечено как нерекомендуемое.
Это предупреждение указывает на использование функции, которая была запрещена и для которой имеется более надежная или безопасная замена.
Замечания
Список всех запрещенных функций, охваченных этой ошибкой, почему они запрещены, и рекомендуемые замены можно найти после следующего примера.
Имя анализа кода: BANNED_API_USAGE
Пример
Следующий код создает это предупреждение:
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Эта проблема связана с использованием небезопасной функции strcpy.
strcpy не проверяет, достаточно ли размер целевого буфера для размещения исходных данных.
Чтобы устранить эту проблему, можно использовать strcpy_s, более безопасную замену функции в C++11.
strcpy_s имеет третий параметр (размер целевого буфера), чтобы убедиться, что копируются только многие байты. Например, следующий код безопаснее:
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
Запрещенные функции
ПРИМЕЧАНИЕ. Этот список активно обновляется и улучшается
| Запрещенный API | Замена | Обоснование / Заметки |
|---|---|---|
_fstrcat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Устаревшая 16-разрядная реализация дальнего указателя |
_fstrcpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Устаревшая 16-разрядная реализация дальнего указателя |
_fstrncat |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Устаревшая реализация 16-разрядного дальнего указателя |
_fstrncpy |
strncpy, wcsncpy |
Устаревшая 16-разрядная реализация дальнего указателя |
_ftccat |
strcat, wcscat |
Устаревшая 16-разрядная реализация указателя дальнего доступа |
_ftccpy |
strcpy, wcscpy |
Устаревшая 16-разрядная реализация дальнего указателя |
_ftcscat |
strcat, wcscat |
Устаревшая 16-разрядная реализация дальнего указателя |
_ftcscpy |
strcpy, wcscpy |
Устаревшая 16-разрядная реализация дальнего указателя |
_getts |
StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx, gets_s |
Нет ограничений на размер данных |
_gettws |
gets_s |
Нет ограничений на размер данных |
_getws |
_getws_s |
Нет ограничений на размер данных |
_mbccat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Нет ограничений на размер данных |
_makepath |
_makepath_s |
Нет ограничений на размер данных |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
Не завершает работу с значением NULL |
_sntprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Не добавляет NULL в конец строки |
_sntscanf |
_snscanf_s |
Максимальная длина отсутствует |
_snwprintf |
_snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Не завершает нулевым символом (NULL) |
_splitpath |
_splitpath_s |
Проверка границ не выполняется |
_stprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Ограниченное обнаружение ошибок |
_stscanf |
sscanf_s (требуется изменение строки форматирования) |
Проверка границ не выполняется |
_tccat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Проверка границ не выполняется |
_tccpy |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
_tcscat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
_tcscpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченное обнаружение ошибок |
_tcsncat |
StringCbLength, StringCchLength, UnalignedStringCbLength, UnalignedStringCchLength |
Максимальная длина отсутствует |
_tcsncpy |
StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx |
Ограниченное обнаружение ошибок |
_tmakepath |
_makepath_s |
Проверка границ не выполняется |
_tscanf |
scanf_s |
Отсутствие проверки границ для выходных данных |
_tsplitpath |
splitpath_s, wsplitpath_s |
Проверка границ не выполняется |
_vsnprintf |
_vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Ограниченное обнаружение ошибок |
_vsntprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Ограниченное обнаружение ошибок |
_vsnwprintf |
_vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx |
Ограниченное обнаружение ошибок |
_vstprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Максимальная длина отсутствует |
_wmakepath |
_wmakepath_s |
Проверка границ не выполняется |
_wsplitpath |
_wsplitpath_s |
Проверка границ не выполняется |
OemToCharW |
WideCharToMultiByte |
Проверка границ не выполняется |
StrCat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
StrCatA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
StrCatBuff |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Без окончания на NULL |
StrCatBuffA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Без нуль-терминации |
StrCatBuffW |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Отсутствие завершения нулевым символом |
StrCatChainW |
StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx |
Без нуль-терминатора |
StrCatN |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCatNA |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCatNW |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCatW |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrCpyA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrCpyN |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает строку символом NULL |
StrCpyNA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает работу с значением NULL |
StrCpyNW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченная проверка ошибок |
strcpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrCpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrNCat |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Ограниченное обнаружение ошибок |
StrNCatA |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Ограниченное обнаружение ошибок |
StrNCatW |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Ограниченное обнаружение ошибок |
StrNCpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает нулевым символом |
StrNCpyA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает работу с значением NULL |
StrNCpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не заканчивает строку символом NULL |
gets |
gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx |
Ограниченное обнаружение ошибок; устаревший стандарт C11 |
lstrcat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatn |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatnA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatnW |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatW |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
lstrcpyA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
lstrcpyn |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченное обнаружение ошибок |
lstrcpynA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченное обнаружение ошибок |
lstrcpynW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
lstrcpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
snscanf |
sscanf_s |
Проверка границ не выполняется |
snwscanf |
swscanf_s |
Проверка границ не выполняется |
sprintf |
sprintf_s |
Ограниченное обнаружение ошибок |
sprintfA |
sprintf_s |
Проверка границ не выполняется |
sprintfW |
swprintf_s |
Проверка границ не выполняется |
lstrncat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
makepath |
||
nsprintf |
sprintf_s |
Ошибки не обнаруживаются, а границы не проверяются |
strcat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Ограниченное обнаружение ошибок |
strcatA |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Ограниченное обнаружение ошибок |
strcatW |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Ограниченное обнаружение ошибок |
strcpy |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
strcpyA |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
strncat |
strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx, strlcat |
Ограниченное обнаружение ошибок |
strncpy |
strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, strlcpy |
Ограниченное обнаружение ошибок |
swprintf |
swprintf_s
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintf, StringCbPrintfEx |
Ограниченное обнаружение ошибок |
ualstrcpyW |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
vsnprintf |
vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Ограниченное обнаружение ошибок |
vsprintf |
vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx, vasprintf |
Ограниченное обнаружение ошибок |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, wcslcat |
Ограниченное обнаружение ошибок |
wcscpy |
wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, wcslcpy |
Проверка границ не выполняется |
wcsncat |
wcsncat_s, wcslcat |
Ограниченное обнаружение ошибок |
wcsncpy |
wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, wcslcpy |
Ограниченное обнаружение ошибок |
wnsprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Отсутствие завершающего NULL-символа |
wnsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Без нуль-терминирования |
wsprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Без NULL-терминатора |
wsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Без символа NULL в конце |
wsprintfW |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Нет терминирования NULL |
wvnsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без окончания символом NULL |
wvnsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без окончания NULL-символом |
wvnsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без нуль-терминатора |
wvsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без NULL-терминации |
wvsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без NULL-окончания |
wvsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без завершения нулевым символом |