From 6b580f833b5ba2e08ed09ed37871521efebd3ba5 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Wed, 11 Jan 2017 17:43:01 +0100 Subject: [PATCH] Don't add all system env variables to the process (PY-21648) --- .../python/sdk/PyVirtualEnvTerminalCustomizer.kt | 3 +-- python/src/com/jetbrains/python/run/PyVirtualEnvReader.kt | 5 +++++ .../com/jetbrains/python/run/PythonCommandLineState.java | 8 +++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/python/python-terminal/src/com/jetbrains/python/sdk/PyVirtualEnvTerminalCustomizer.kt b/python/python-terminal/src/com/jetbrains/python/sdk/PyVirtualEnvTerminalCustomizer.kt index a4b0ed7d88a4..2bdbb4ce8460 100644 --- a/python/python-terminal/src/com/jetbrains/python/sdk/PyVirtualEnvTerminalCustomizer.kt +++ b/python/python-terminal/src/com/jetbrains/python/sdk/PyVirtualEnvTerminalCustomizer.kt @@ -65,8 +65,7 @@ class PyVirtualEnvTerminalCustomizer : LocalTerminalCustomizer() { // we add only envs that are setup by the activate script, because adding other variables from the different shell // can break the actual shell envs.putAll(reader.readShellEnv().mapKeys { k -> k.key.toUpperCase() }.filterKeys { k -> - k in arrayOf("PATH", "PS1", "VIRTUAL_ENV", "PYTHONHOME", "PROMPT", "_OLD_VIRTUAL_PROMPT", "_OLD_VIRTUAL_PYTHONHOME", - "_OLD_VIRTUAL_PATH") + k in PyVirtualEnvReader.virtualEnvVars }) } } diff --git a/python/src/com/jetbrains/python/run/PyVirtualEnvReader.kt b/python/src/com/jetbrains/python/run/PyVirtualEnvReader.kt index 7b412a228a45..792bcc794ab0 100644 --- a/python/src/com/jetbrains/python/run/PyVirtualEnvReader.kt +++ b/python/src/com/jetbrains/python/run/PyVirtualEnvReader.kt @@ -31,6 +31,11 @@ import java.io.File class PyVirtualEnvReader(val virtualEnvSdkPath: String) : EnvironmentUtil.ShellEnvReader() { private val LOG = Logger.getInstance("#com.jetbrains.python.run.PyVirtualEnvReader") + companion object { + val virtualEnvVars = listOf("PATH", "PS1", "VIRTUAL_ENV", "PYTHONHOME", "PROMPT", "_OLD_VIRTUAL_PROMPT", "_OLD_VIRTUAL_PYTHONHOME", + "_OLD_VIRTUAL_PATH") + } + // in case of Conda we need to pass an argument to an activate script that tells which exactly environment to activate val activate: Pair? = findActivateScript(virtualEnvSdkPath, shell) diff --git a/python/src/com/jetbrains/python/run/PythonCommandLineState.java b/python/src/com/jetbrains/python/run/PythonCommandLineState.java index 15f25a3d4fc8..102d17048c25 100644 --- a/python/src/com/jetbrains/python/run/PythonCommandLineState.java +++ b/python/src/com/jetbrains/python/run/PythonCommandLineState.java @@ -73,6 +73,7 @@ import java.io.IOException; import java.net.ServerSocket; import java.nio.charset.Charset; import java.util.*; +import java.util.stream.Collectors; /** * @author traff, Leonid Shalupov @@ -304,16 +305,17 @@ public abstract class PythonCommandLineState extends CommandLineState { PyVirtualEnvReader reader = new PyVirtualEnvReader(sdkHome); if (reader.getActivate() != null) { try { - env.putAll(reader.readShellEnv()); + env.putAll(reader.readShellEnv().entrySet().stream().filter((entry) -> PyVirtualEnvReader.Companion.getVirtualEnvVars().contains(entry.getKey()) + ).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))); for (Map.Entry e : myConfig.getEnvs().entrySet()) { if ("PATH".equals(e.getKey())) { env.put(e.getKey(), PythonEnvUtil.appendToPathEnvVar(env.get("PATH"), e.getValue())); - } else { + } + else { env.put(e.getKey(), e.getValue()); } } - } catch (Exception e) { LOG.error("Couldn't read virtualenv variables", e);