Целевой буфер getwd
или realpath
меньшего размера, чем байты PATH_MAX
Использование функции манипуляции с путями без буферной проверки максимального размера происходит, когда целевой аргумент функции манипуляции с путями, такой как realpath
или getwd
имеет buffer size меньше, чем байты PATH_MAX
.
Буфер, меньшего размера, чем байты PATH_MAX
, может переполниться, но вы не можете протестировать функциональное возвращаемое значение, чтобы определить, произошло ли переполнение. Если переполнение происходит, после вызова функции, содержимое буфера не определено.
Например, char *getwd(char *buf)
копирует абсолютный путь текущей папки к ее аргументу. Если длина абсолютного пути больше, чем байты PATH_MAX
, getwd
возвращает NULL
, и содержимое *buf
не определено. Можно протестировать возвращаемое значение 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
является NULL
. Однако необходимо освободить эту память позже с помощью функции free
.
Группа: Статическое ЗУ |
Язык: C | C++ |
Значение по умолчанию: 'off' |
Синтаксис командной строки: PATH_BUFFER_OVERFLOW |
Влияние: высоко |
ID CWE: 785 |