mirror of
https://github.com/python/cpython.git
synced 2024-11-25 09:39:56 +01:00
d48cc82ed2
This patch properly quotes template strings in `venv` activation scripts. This mitigates potential command injection.
77 lines
2.1 KiB
Plaintext
77 lines
2.1 KiB
Plaintext
# This file must be used with "source bin/activate" *from bash*
|
|
# You cannot run it directly
|
|
|
|
deactivate () {
|
|
# reset old environment variables
|
|
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
|
|
PATH="${_OLD_VIRTUAL_PATH:-}"
|
|
export PATH
|
|
unset _OLD_VIRTUAL_PATH
|
|
fi
|
|
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
|
|
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
|
|
export PYTHONHOME
|
|
unset _OLD_VIRTUAL_PYTHONHOME
|
|
fi
|
|
|
|
# Call hash to forget past locations. Without forgetting
|
|
# past locations the $PATH changes we made may not be respected.
|
|
# See "man bash" for more details. hash is usually a builtin of your shell
|
|
hash -r 2> /dev/null
|
|
|
|
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
|
PS1="${_OLD_VIRTUAL_PS1:-}"
|
|
export PS1
|
|
unset _OLD_VIRTUAL_PS1
|
|
fi
|
|
|
|
unset VIRTUAL_ENV
|
|
unset VIRTUAL_ENV_PROMPT
|
|
if [ ! "${1:-}" = "nondestructive" ] ; then
|
|
# Self destruct!
|
|
unset -f deactivate
|
|
fi
|
|
}
|
|
|
|
# unset irrelevant variables
|
|
deactivate nondestructive
|
|
|
|
# on Windows, a path can contain colons and backslashes and has to be converted:
|
|
case "$(uname)" in
|
|
CYGWIN*|MSYS*|MINGW*)
|
|
# transform D:\path\to\venv to /d/path/to/venv on MSYS and MINGW
|
|
# and to /cygdrive/d/path/to/venv on Cygwin
|
|
VIRTUAL_ENV=$(cygpath __VENV_DIR__)
|
|
export VIRTUAL_ENV
|
|
;;
|
|
*)
|
|
# use the path as-is
|
|
export VIRTUAL_ENV=__VENV_DIR__
|
|
;;
|
|
esac
|
|
|
|
_OLD_VIRTUAL_PATH="$PATH"
|
|
PATH="$VIRTUAL_ENV/"__VENV_BIN_NAME__":$PATH"
|
|
export PATH
|
|
|
|
VIRTUAL_ENV_PROMPT=__VENV_PROMPT__
|
|
export VIRTUAL_ENV_PROMPT
|
|
|
|
# unset PYTHONHOME if set
|
|
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
|
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
|
if [ -n "${PYTHONHOME:-}" ] ; then
|
|
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
|
|
unset PYTHONHOME
|
|
fi
|
|
|
|
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
|
_OLD_VIRTUAL_PS1="${PS1:-}"
|
|
PS1="("__VENV_PROMPT__") ${PS1:-}"
|
|
export PS1
|
|
fi
|
|
|
|
# Call hash to forget past commands. Without forgetting
|
|
# past commands the $PATH changes we made may not be respected
|
|
hash -r 2> /dev/null
|