]> granicus.if.org Git - python/commitdiff
Merged revisions 65235 via svnmerge from
authorAntoine Pitrou <solipsis@pitrou.net>
Fri, 25 Jul 2008 19:58:18 +0000 (19:58 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Fri, 25 Jul 2008 19:58:18 +0000 (19:58 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r65235 | antoine.pitrou | 2008-07-25 21:42:26 +0200 (ven., 25 juil. 2008) | 3 lines

  #3394: zipfile.writestr doesn't set external attributes, so files are extracted mode 000 on Unix
........

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

index a647fc6e2c8a9e6fca6720f0b79a88f325011c80..9e565fb153f89930db387c21daefd716baf61b33 100644 (file)
@@ -365,6 +365,19 @@ class TestsWithSourceFile(unittest.TestCase):
         # remove the test file subdirectories
         shutil.rmtree(os.path.join(os.getcwd(), 'ziptest2dir'))
 
+    def zip_test_writestr_permissions(self, f, compression):
+        # Make sure that writestr creates files with mode 0600,
+        # when it is passed a name rather than a ZipInfo instance.
+
+        self.makeTestArchive(f, compression)
+        zipfp = zipfile.ZipFile(f, "r")
+        zinfo = zipfp.getinfo('strfile')
+        self.assertEqual(zinfo.external_attr, 0o600 << 16)
+
+    def test_writestr_permissions(self):
+        for f in (TESTFN2, TemporaryFile(), io.BytesIO()):
+            self.zip_test_writestr_permissions(f, zipfile.ZIP_STORED)
+
     def tearDown(self):
         os.remove(TESTFN)
         os.remove(TESTFN2)
index fda990385d0ec2aae59211ed121321776d9fc643..e4bc019d1b26446d23965f15311f924058cca4fd 100644 (file)
@@ -1075,6 +1075,7 @@ class ZipFile:
             zinfo = ZipInfo(filename=zinfo_or_arcname,
                             date_time=time.localtime(time.time())[:6])
             zinfo.compress_type = self.compression
+            zinfo.external_attr = 0o600 << 16
         else:
             zinfo = zinfo_or_arcname
 
index 54a0baa94cf9cf7a3a8b3a84708d5d6cb0cd4c73..76ecbccf81f25b6dd55dc0c74811170e50137e32 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -4,6 +4,19 @@ Python News
 
 (editors: check NEWS.help for information about editing NEWS using ReST.)
 
+What's new in Python 3.0b3?
+===========================
+
+*Release date: XX-XXX-2008*
+
+Library
+-------
+
+- Issue #3394: zipfile.writestr sets external attributes when passed a
+  file name rather than a ZipInfo instance, so files are extracted with
+  mode 0600 rather than 000 under Unix.
+
+
 What's new in Python 3.0b2?
 ===========================
 
@@ -191,7 +204,7 @@ Library
 - The ``xmlrpc`` package was created; it contains the old
   ``xmlrpclib`` module as ``xmlrpc.client`` and the content of
   the old ``SimpleXMLRPCServer`` and ``DocXMLRPCServer`` modules
-  as ``xmlrpc.server``.  
+  as ``xmlrpc.server``.
 
 - The ``dbm`` package was created, containing the old modules
   ``anydbm`` and ``whichdb`` in its ``__init__.py``, and having
@@ -562,7 +575,7 @@ Core and Builtins
 - Fixed `imp.find_module()` to obey the -*- coding: -*- header.
 
 - Changed `__file__` and `co_filename` to unicode. The path names are decoded
-  with `Py_FileSystemDefaultEncoding` and a new API method 
+  with `Py_FileSystemDefaultEncoding` and a new API method
   `PyUnicode_DecodeFSDefault(char*)` was added.
 
 - io.open() and _fileio.FileIO have grown a new argument closefd. A