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