https://github.com/python/cpython/commit/14f1ca7d5363386163839b31ce987423daecc3de
commit: 14f1ca7d5363386163839b31ce987423daecc3de
branch: main
author: Nice Zombies <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2024-03-28T21:20:08Z
summary:

gh-117335: Handle non-iterables for `ntpath.commonpath` (GH-117336)

files:
A Misc/NEWS.d/next/Core and 
Builtins/2024-03-28-19-13-20.gh-issue-117335.d6uKJu.rst
M Lib/ntpath.py
M Lib/test/test_ntpath.py

diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index f1c48ecd1e5e2a..ecfc7d48dbb192 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -831,23 +831,22 @@ def relpath(path, start=None):
         raise
 
 
-# Return the longest common sub-path of the sequence of paths given as input.
+# Return the longest common sub-path of the iterable of paths given as input.
 # The function is case-insensitive and 'separator-insensitive', i.e. if the
 # only difference between two paths is the use of '\' versus '/' as separator,
 # they are deemed to be equal.
 #
 # However, the returned path will have the standard '\' separator (even if the
 # given paths had the alternative '/' separator) and will have the case of the
-# first path given in the sequence. Additionally, any trailing separator is
+# first path given in the iterable. Additionally, any trailing separator is
 # stripped from the returned path.
 
 def commonpath(paths):
-    """Given a sequence of path names, returns the longest common sub-path."""
-
+    """Given an iterable of path names, returns the longest common sub-path."""
+    paths = tuple(map(os.fspath, paths))
     if not paths:
-        raise ValueError('commonpath() arg is an empty sequence')
+        raise ValueError('commonpath() arg is an empty iterable')
 
-    paths = tuple(map(os.fspath, paths))
     if isinstance(paths[0], bytes):
         sep = b'\\'
         altsep = b'/'
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 9cb03e3cd5de8d..c816f99e7e9f1b 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -871,11 +871,14 @@ def check_error(exc, paths):
             self.assertRaises(exc, ntpath.commonpath,
                               [os.fsencode(p) for p in paths])
 
+        self.assertRaises(TypeError, ntpath.commonpath, None)
         self.assertRaises(ValueError, ntpath.commonpath, [])
+        self.assertRaises(ValueError, ntpath.commonpath, iter([]))
         check_error(ValueError, ['C:\\Program Files', 'Program Files'])
         check_error(ValueError, ['C:\\Program Files', 'C:Program Files'])
         check_error(ValueError, ['\\Program Files', 'Program Files'])
         check_error(ValueError, ['Program Files', 'C:\\Program Files'])
+
         check(['C:\\Program Files'], 'C:\\Program Files')
         check(['C:\\Program Files', 'C:\\Program Files'], 'C:\\Program Files')
         check(['C:\\Program Files\\', 'C:\\Program Files'],
diff --git a/Misc/NEWS.d/next/Core and 
Builtins/2024-03-28-19-13-20.gh-issue-117335.d6uKJu.rst b/Misc/NEWS.d/next/Core 
and Builtins/2024-03-28-19-13-20.gh-issue-117335.d6uKJu.rst
new file mode 100644
index 00000000000000..e419b2e97f3886
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and 
Builtins/2024-03-28-19-13-20.gh-issue-117335.d6uKJu.rst 
@@ -0,0 +1 @@
+Raise TypeError for non-sequences for :func:`ntpath.commonpath`.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to