Функция пишет, чтобы буферизовать при смещении, больше, чем buffer size
Целевое переполнение буфера в обработке строк происходит, когда определенные функции обработки строк пишут в свой целевой буферный аргумент при смещении, больше, чем buffer size.
Например, при вызове функционального sprintf(char* buffer, const char* format)
, вы используете постоянную строку format
большего размера, чем buffer
.
Переполнение буфера может вызвать неожиданное поведение, такое как повреждение памяти или остановка вашей системы. Переполнение буфера также вводит риск инжекции кода.
Одно возможное решение состоит в том, чтобы использовать альтернативные функции, чтобы ограничить количество записанных символов. Например:
Если вы используете sprintf
, чтобы записать отформатированные данные в строку, используйте snprintf
, _snprintf
или sprintf_s
вместо этого, чтобы осуществить управление длиной. Также используйте asprintf
, чтобы автоматически выделить память, требуемую для целевого буфера.
Если вы используете vsprintf
, чтобы записать отформатированные данные от списка аргументов переменной до строки, используйте vsnprintf
или vsprintf_s
вместо этого, чтобы осуществить управление длиной.
Если вы используете wcscpy
, чтобы скопировать широкую строку, используйте wcsncpy
, wcslcpy
или wcscpy_s
вместо этого, чтобы осуществить управление длиной.
Другое возможное решение состоит в том, чтобы увеличить buffer size.
Группа: Статическое ЗУ |
Язык: C | C++ |
Значение по умолчанию: на |
Синтаксис командной строки: STRLIB_BUFFER_OVERFLOW |
Влияние: высоко |
ID CWE: 121, 125, 135, 251, 787 |