Третий аргумент readlink не оставляет пробел для пустого терминатора строки в буфере
Неправильное употребление readlink () происходит, когда вы передаете аргумент buffer size readlink() это не оставляет пробел для пустого терминатора строки в буфере.
Например:
ssize_t len = readlink("/usr/bin/perl", buf, sizeof(buf));readlink() не покидает пробел, чтобы ввести пустой терминатор строки.readlink() функционируйте копирует содержимое символьной ссылки (первый аргумент) к буферу (второй аргумент). Однако функция не добавляет пустой терминатор строки к скопированному содержимому. После использования readlink(), необходимо явным образом добавить пустой терминатор строки в буфер.
Если вы заполняете целый буфер при использовании readlink, вы не оставляете пробел для этого пустого терминатора строки.
При использовании readlink() функционируйте, убедитесь, что третий аргумент является тем меньше, чем buffer size.
Затем добавьте пустой терминатор строки к буферу. Чтобы определить, где добавить пустой терминатор строки, проверяйте возвращаемое значение readlink(). Если возвращаемое значение-1, ошибка произошла. В противном случае возвращаемое значение является количеством символов скопированные (байты).
| Группа: безопасность |
| Язык: C | C++ |
| Значение по умолчанию: 'off' |
Синтаксис командной строки: READLINK_MISUSE |
| Удар: носитель |
| ID 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