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