diff --git a/Lib/macpath.py b/Lib/macpath.py index dbcf3684684..a90d1053bc8 100644 --- a/Lib/macpath.py +++ b/Lib/macpath.py @@ -53,6 +53,8 @@ def join(s, *p): try: colon = _get_colon(s) path = s + if not p: + path[:0] + colon #23780: Ensure compatible data type even if p is null. for t in p: if (not path) or isabs(t): path = t diff --git a/Lib/ntpath.py b/Lib/ntpath.py index cfb46060198..9cc5ca738d4 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -81,6 +81,8 @@ def join(path, *paths): seps = '\\/' colon = ':' try: + if not paths: + path[:0] + sep #23780: Ensure compatible data type even if p is null. result_drive, result_path = splitdrive(path) for p in paths: p_drive, p_path = splitdrive(p) diff --git a/Lib/posixpath.py b/Lib/posixpath.py index ea51e118338..09b88979684 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -76,6 +76,8 @@ def join(a, *p): sep = _get_sep(a) path = a try: + if not p: + path[:0] + sep #23780: Ensure compatible data type even if p is null. for b in p: if b.startswith(sep): path = b diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py index f2722bcc8a5..6ba55df8c40 100644 --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -448,6 +448,10 @@ class CommonTest(GenericTest): self.pathmodule.join(42, 'str') with self.assertRaisesRegex(TypeError, errmsg % 'int'): self.pathmodule.join('str', 42) + with self.assertRaisesRegex(TypeError, errmsg % 'int'): + self.pathmodule.join(42) + with self.assertRaisesRegex(TypeError, errmsg % 'list'): + self.pathmodule.join([]) with self.assertRaisesRegex(TypeError, errmsg % 'bytearray'): self.pathmodule.join(bytearray(b'foo'), bytearray(b'bar')) diff --git a/Misc/NEWS b/Misc/NEWS index 9aa3cf73851..3d8e3166a94 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -49,6 +49,8 @@ Core and Builtins Library ------- +- Issue #23780: Improved error message in os.path.join() with single argument. + - Issue #6598: Increased time precision and random number range in email.utils.make_msgid() to strengthen the uniqueness of the message ID.