Функция пишет, чтобы буферизовать при смещении, больше, чем 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 |