аргумент функции putenv-семейства, не доступный вне его осциллографа
Этот дефект происходит когда аргумент putenv
- функция семейства является локальной переменной с автоматической длительностью.
Функциональный putenv(char *string)
вставляет указатель на его переданный аргумент в массив среды, вместо того, чтобы делать копию аргумента. Если аргумент является автоматической переменной, ее память может быть перезаписана после функции, содержащей putenv()
вызовите возвращается. Последующий вызов getenv()
от другой функции возвращает адрес переменной out-of-scope, которая не может быть разыменована по закону. Эта переменная out-of-scope может заставить переменные окружения брать неожиданные значения, заставлять программу прекращать отвечать или позволять произвольные уязвимости выполнения кода.
Используйте setenv()
/unsetenv()
установить и сбросить переменные окружения. В качестве альтернативы используйте putenv
- аргументы функции семейства с динамически выделенной памятью, или, если ваше приложение не имеет никаких требований повторной входимости, аргументов со статической длительностью. Например, одно выполнение потока без рекурсии или прерываний не требует повторной входимости. Это не может быть названо (повторно введенное) во время своего выполнения.
Группа: Статическое ЗУ |
Язык: C | C++ |
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода |
Синтаксис командной строки:
PUTENV_AUTO_VAR
|
Удар: высоко |
ID CWE: 562, 686, 825 |