Третий аргумент 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