From 618738b921d9b3fa1f54304dd18236b3d465fbf8 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Tue, 16 Apr 2013 11:05:03 -0400 Subject: - Issue #17012: shutil.which() no longer fallbacks to the PATH environment variable if empty path argument is specified. Patch by Serhiy Storchaka. --- Lib/shutil.py | 6 +++++- Lib/test/test_shutil.py | 21 +++++++++++++++++++++ Misc/NEWS | 3 +++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Lib/shutil.py b/Lib/shutil.py index a188408..3904f43 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -1091,7 +1091,11 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None): return cmd return None - path = (path or os.environ.get("PATH", os.defpath)).split(os.pathsep) + if path is None: + path = os.environ.get("PATH", os.defpath) + if not path: + return None + path = path.split(os.pathsep) if sys.platform == "win32": # The current directory takes precedence on Windows. diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index 3b1b694..a3e3a52 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -24,6 +24,7 @@ import warnings from test import support from test.support import TESTFN, check_warnings, captured_stdout, requires_zlib +from unittest.mock import patch try: import bz2 @@ -1352,6 +1353,26 @@ class TestWhich(unittest.TestCase): rv = shutil.which(self.file[:-4], path=self.dir) self.assertEqual(rv, self.temp_file.name[:-4] + ".EXE") + def test_environ_path(self): + with support.EnvironmentVarGuard() as env: + env['PATH'] = self.dir + rv = shutil.which(self.file) + self.assertEqual(rv, self.temp_file.name) + + def test_empty_path(self): + base_dir = os.path.dirname(self.dir) + with support.temp_cwd(path=self.dir), \ + support.EnvironmentVarGuard() as env: + env['PATH'] = self.dir + rv = shutil.which(self.file, path='') + self.assertIsNone(rv) + + def test_empty_path_no_PATH(self): + with support.EnvironmentVarGuard() as env: + env.pop('PATH', None) + rv = shutil.which(self.file) + self.assertIsNone(rv) + class TestMove(unittest.TestCase): diff --git a/Misc/NEWS b/Misc/NEWS index bf64dfd..c085fba 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -29,6 +29,9 @@ Core and Builtins Library ------- +- Issue #17012: shutil.which() no longer fallbacks to the PATH environment + variable if empty path argument is specified. Patch by Serhiy Storchaka. + - Issue #17710: Fix pickle raising a SystemError on bogus input. - Issue #17341: Include the invalid name in the error messages from re about -- cgit v0.12