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