]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-33660: Fix PosixPath to resolve a relative path on root (GH-21975)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 27 Aug 2020 00:47:10 +0000 (17:47 -0700)
committerGitHub <noreply@github.com>
Thu, 27 Aug 2020 00:47:10 +0000 (02:47 +0200)
(cherry picked from commit 94ad6c674f7687ef22853cb8d42b440d6b42ddc8)

Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>
Lib/pathlib.py
Lib/test/test_pathlib.py
Misc/NEWS.d/next/Library/2018-06-12-23-30-41.bpo-33660.AdDn5Z.rst [new file with mode: 0644]

index ff8bac94bc0bea2edbd078a616812708e77ce796..4f72bab3bdbbc55766c53a76ec199bf9805f07e7 100644 (file)
@@ -329,7 +329,10 @@ class _PosixFlavour(_Flavour):
                     # parent dir
                     path, _, _ = path.rpartition(sep)
                     continue
-                newpath = path + sep + name
+                if path.endswith(sep):
+                    newpath = path + name
+                else:
+                    newpath = path + sep + name
                 if newpath in seen:
                     # Already seen this path
                     path = seen[newpath]
index 36226948222d642b1cdbcb20ba88ac757ba62c2e..e9f928a986555fccc4c7fd8f08b25389e3983551 100644 (file)
@@ -2214,6 +2214,15 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
         st = os.stat(join('other_new_file'))
         self.assertEqual(stat.S_IMODE(st.st_mode), 0o644)
 
+    def test_resolve_root(self):
+        current_directory = os.getcwd()
+        try:
+            os.chdir('/')
+            p = self.cls('spam')
+            self.assertEqual(str(p.resolve()), '/spam')
+        finally:
+            os.chdir(current_directory)
+
     def test_touch_mode(self):
         old_mask = os.umask(0)
         self.addCleanup(os.umask, old_mask)
diff --git a/Misc/NEWS.d/next/Library/2018-06-12-23-30-41.bpo-33660.AdDn5Z.rst b/Misc/NEWS.d/next/Library/2018-06-12-23-30-41.bpo-33660.AdDn5Z.rst
new file mode 100644 (file)
index 0000000..cce3dbb
--- /dev/null
@@ -0,0 +1,2 @@
+Fix pathlib.PosixPath to resolve a relative path located on the root
+directory properly.