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