Строка в стиле C должна гарантировать достаточное пространство для данных и нулевого терминатор строки
Строка в стиле C должна гарантировать достаточное пространство для данных и нулевого терминатор строки.
Строки в стиле C не только требуют пространства для записанных символьных данных, но и требуют одного явного символа в конце для дополнительного нулевого терминатора строки. Отказ разместить необходимое пространство приводит к переполнению буфера, что приводит к повреждению памяти, уязвимостям безопасности и другим проблемам.
Чекер ищет следующие проблемы:
Использование опасной стандартной функции.
Эта проблема возникает при использовании функций C, таких как gets
и strcpy
, которые записывают данные в буфер, но по своей сути не обеспечивают управление длиной записанных данных.
Более полный список функций и их более безопасных альтернатив см. в Use of dangerous standard function
.
Переполнение буфера из неверного спецификатора строкового формата.
Эта проблема возникает, когда аргумент спецификатора формата для функций C, таких как sscanf
приводит к переполнению или нижнему потоку в аргументе буфера памяти.
Переполнение целевого буфера при манипуляции строками.
Эта проблема возникает, когда определенные функции манипуляции строками C записывают в их аргумент буфера назначения со смещением, большим, чем buffer size.
Например, при вызове функции sprintf(char* buffer, const char* format)
, вы используете постоянную строку format
большего размера, чем buffer
.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Библиотека ввода/вывода |
Категория: Консультационные, Автоматизированные |