]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #6050: Don't fail extracting a directory from a zipfile if
authorMartin v. Löwis <martin@v.loewis.de>
Sun, 24 May 2009 19:30:52 +0000 (19:30 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sun, 24 May 2009 19:30:52 +0000 (19:30 +0000)
the directory already exists.

Lib/test/test_zipfile.py
Lib/zipfile.py
Misc/NEWS

index fcb55d1523a80a9db9d37ff3c7ba6d9ac78c1524..cb8ba10d0fa60f245a94fb5d3ac4c3adc75fd801 100644 (file)
@@ -1023,6 +1023,11 @@ class TestWithDirectory(unittest.TestCase):
         self.assertTrue(os.path.isdir(os.path.join(TESTFN2, "a", "b")))
         self.assertTrue(os.path.exists(os.path.join(TESTFN2, "a", "b", "c")))
 
+    def test_bug_6050(self):
+        # Extraction should succeed if directories already exist
+        os.mkdir(os.path.join(TESTFN2, "a"))
+        self.testExtractDir()
+
     def testStoreDir(self):
         os.mkdir(os.path.join(TESTFN2, "x"))
         zipf = zipfile.ZipFile(TESTFN, "w")
index e3d40b4a3a6f6ad1f1f1285a0e0df13668c8c30d..68885f9e0b8e1b4f0aca6b2e678635e89b8ecb5a 100644 (file)
@@ -971,7 +971,8 @@ class ZipFile:
             os.makedirs(upperdirs)
 
         if member.filename[-1] == '/':
-            os.mkdir(targetpath)
+            if not os.path.isdir(targetpath):
+                os.mkdir(targetpath)
             return targetpath
 
         source = self.open(member, pwd=pwd)
index a21651b161d8d97acc0127572032b6e73ceb2581..c2f2121fa94ddb12f2099535cc6d723b908b5ec0 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -302,6 +302,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #6050: Don't fail extracting a directory from a zipfile if
+  the directory already exists.
+
 - Issue #5311: bdist_msi can now build packages that do not depend on a
   specific Python version.