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