Буфер назначения getwd или realpath меньше, чем PATH_MAX байты
Этот дефект возникает, когда аргумент назначения функции манипуляции трактом, такой как realpath или getwd имеет размер буфера менее PATH_MAX байт.
Буфер меньше PATH_MAX байты могут переполняться, но вы не можете проверить возвращаемое значение функции, чтобы определить, произошло ли переполнение. Если происходит переполнение, после вызова функции содержимое буфера не определено.
Например, char *getwd(char *buf) копирует абсолютное имя пути текущей папки в ее аргумент. Если длина абсолютного пути больше, чем PATH_MAX байты, getwd прибыль NULL и содержание *buf не определен. Можно проверить возвращаемое значение getwd для NULL для проверки успешности вызова функции.
Однако, если разрешенный буфер для buf меньше, чем PATH_MAX байт, сбой может произойти для меньшего абсолютного имени пути. В этом случае getwd не возвращается NULL несмотря на то, что произошел сбой. Следовательно, разрешенный буфер для buf должно быть PATH_MAX в байтах.
Возможные исправления:
Использовать размер буфера PATH_MAX байт. Если буфер получен из неизвестного источника, перед использованием буфера в качестве аргумента getwd или realpath , убедитесь, что размер меньше PATH_MAX байт.
Используйте функцию управления путями, которая позволяет указать размер буфера.
Например, если используется getwd чтобы получить абсолютный путь к текущей папке, используйте char *getcwd(char *buf, size_t size); вместо этого. Дополнительный аргумент size позволяет указать размер, больший или равный PATH_MAX.
Разрешить функции выделять дополнительную память динамически, если это возможно.
Например, char *realpath(const char *path, char *resolved_path); динамически выделяет память, если resolved_path является NULL. Тем не менее, вы должны освободить эту память позже с помощью free функция.
| Группа: Статическая память |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки: PATH_BUFFER_OVERFLOW |
| Воздействие: Высокое |
| ИДЕНТИФИКАТОР CWE: 785 |