Функция записывает в буфер со смещением, большим, чем 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++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: STRLIB_BUFFER_OVERFLOW |
Влияние: Высокий |
ИДЕНТИФИКАТОР CWE: 121, 125, 135, 251, 787 |