Третий аргумент readlink не оставляет места для пустого терминатора в буфере
Этот дефект возникает при передаче аргумента размера буфера readlink() не оставляет места для пустого терминатора в буфере.
Например:
ssize_t len = readlink("/usr/bin/perl", buf, sizeof(buf));readlink() не оставляет места для ввода пустого признака конца. readlink() функция копирует содержимое символьной ссылки (первый аргумент) в буфер (второй аргумент). Однако функция не добавляет к скопированному содержимому терминатор null. После использования readlink(), необходимо явно добавить в буфер терминатор NULL.
При заполнении всего буфера при использовании readlink, вы не оставляете места для этого пустого терминатора.
При использовании readlink() убедитесь, что третий аргумент меньше размера буфера.
Затем добавьте в буфер нуль-терминатор. Чтобы определить, куда добавить терминатор null, проверьте возвращаемое значение readlink(). Если возвращаемое значение равно -1, произошла ошибка. В противном случае возвращаемое значение представляет собой количество скопированных символов (байт).
| Группа: Безопасность |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки: READLINK_MISUSE |
| Воздействие: среднее |
| ИДЕНТИФИКАТОР CWE: 170 |
Array access out of bounds | File access between time of check and use (TOCTOU) | Find defects (-checkers) | Invalid use of standard library string routine | Pointer access out of bounds | Returned value of a sensitive function not checked