summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_venv.py8
-rw-r--r--Lib/venv/__init__.py3
-rw-r--r--Misc/NEWS.d/next/Library/2021-02-14-20-55-53.bpo-43218.VZv2M4.rst2
3 files changed, 13 insertions, 0 deletions
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index c91b754..d96cf1e 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -467,6 +467,14 @@ class BasicTest(BaseTest):
'import os; print("__PYVENV_LAUNCHER__" in os.environ)'])
self.assertEqual(out.strip(), 'False'.encode())
+ def test_pathsep_error(self):
+ """
+ Test that venv creation fails when the target directory contains
+ the path separator.
+ """
+ rmtree(self.env_dir)
+ self.assertRaises(ValueError, venv.create, self.env_dir + os.pathsep)
+
@requireVenvCreate
class EnsurePipTest(BaseTest):
"""Test venv module installation of pip."""
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index a8640d9..7bfbadd 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -116,6 +116,9 @@ class EnvBuilder:
elif os.path.islink(d) or os.path.isfile(d):
raise ValueError('Unable to create directory %r' % d)
+ if os.pathsep in env_dir:
+ raise ValueError(f'Refusing to create a venv in {env_dir} because '
+ f'it contains the PATH separator {os.pathsep}.')
if os.path.exists(env_dir) and self.clear:
self.clear_directory(env_dir)
context = types.SimpleNamespace()
diff --git a/Misc/NEWS.d/next/Library/2021-02-14-20-55-53.bpo-43218.VZv2M4.rst b/Misc/NEWS.d/next/Library/2021-02-14-20-55-53.bpo-43218.VZv2M4.rst
new file mode 100644
index 0000000..31229c3
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-02-14-20-55-53.bpo-43218.VZv2M4.rst
@@ -0,0 +1,2 @@
+Prevent creation of a venv whose path contains the PATH separator. This
+could affect the usage of the activate script. Patch by Dustin Rodrigues.