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