]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #17201: ZIP64 extensions now are enabled by default.
authorSerhiy Storchaka <storchaka@gmail.com>
Sat, 23 Nov 2013 13:55:38 +0000 (15:55 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Sat, 23 Nov 2013 13:55:38 +0000 (15:55 +0200)
Patch by William Mallard.

Doc/library/zipfile.rst
Lib/test/test_zipfile.py
Lib/test/test_zipfile64.py
Lib/zipfile.py
Misc/ACKS
Misc/NEWS

index f7303ea3f0a0313bf98852348840ddab68a6dbf5..72b76a09d396323e06b6e35f46941fa4cc98be7d 100644 (file)
@@ -130,7 +130,7 @@ ZipFile Objects
 ---------------
 
 
-.. class:: ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=False)
+.. class:: ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)
 
    Open a ZIP file, where *file* can be either a path to a file (a string) or a
    file-like object.  The *mode* parameter should be ``'r'`` to read an existing
@@ -147,12 +147,9 @@ ZipFile Objects
    :const:`ZIP_BZIP2` or :const:`ZIP_LZMA` is specified but the corresponding module
    (:mod:`zlib`, :mod:`bz2` or :mod:`lzma`) is not available, :exc:`RuntimeError`
    is also raised. The default is :const:`ZIP_STORED`.  If *allowZip64* is
-   ``True`` zipfile will create ZIP files that use the ZIP64 extensions when
-   the zipfile is larger than 2 GiB. If it is  false (the default) :mod:`zipfile`
+   ``True`` (the default) zipfile will create ZIP files that use the ZIP64
+   extensions when the zipfile is larger than 2 GiB. If it is  false :mod:`zipfile`
    will raise an exception when the ZIP file would require ZIP64 extensions.
-   ZIP64 extensions are disabled by default because the default :program:`zip`
-   and :program:`unzip` commands on Unix (the InfoZIP utilities) don't support
-   these extensions.
 
    If the file is created with mode ``'a'`` or ``'w'`` and then
    :meth:`closed <close>` without adding any files to the archive, the appropriate
@@ -171,6 +168,9 @@ ZipFile Objects
    .. versionchanged:: 3.3
       Added support for :mod:`bzip2 <bz2>` and :mod:`lzma` compression.
 
+   .. versionchanged:: 3.4
+      ZIP64 extensions are enabled by default.
+
 
 .. method:: ZipFile.close()
 
@@ -374,12 +374,15 @@ PyZipFile Objects
 The :class:`PyZipFile` constructor takes the same parameters as the
 :class:`ZipFile` constructor, and one additional parameter, *optimize*.
 
-.. class:: PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=False, \
+.. class:: PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, \
                      optimize=-1)
 
    .. versionadded:: 3.2
       The *optimize* parameter.
 
+   .. versionchanged:: 3.4
+      ZIP64 extensions are enabled by default.
+
    Instances have one method in addition to those of :class:`ZipFile` objects:
 
    .. method:: PyZipFile.writepy(pathname, basename='', filterfunc=None)
index 7249b13d4c2b51e2cd3e175826790b4309d246d1..c15ea9fa26e58b6bb58200e15f34e30f39af404f 100644 (file)
@@ -506,12 +506,12 @@ class StoredTestZip64InSmallFiles(AbstractTestZip64InSmallFiles,
     compression = zipfile.ZIP_STORED
 
     def large_file_exception_test(self, f, compression):
-        with zipfile.ZipFile(f, "w", compression) as zipfp:
+        with zipfile.ZipFile(f, "w", compression, allowZip64=False) as zipfp:
             self.assertRaises(zipfile.LargeZipFile,
                               zipfp.write, TESTFN, "another.name")
 
     def large_file_exception_test2(self, f, compression):
-        with zipfile.ZipFile(f, "w", compression) as zipfp:
+        with zipfile.ZipFile(f, "w", compression, allowZip64=False) as zipfp:
             self.assertRaises(zipfile.LargeZipFile,
                               zipfp.writestr, "another.name", self.data)
 
index a8fb7aba5455c30c731a3ec3a935a389096f4509..498d464db3e2128afd2b03f572cdf17f13f05bbd 100644 (file)
@@ -38,7 +38,7 @@ class TestsWithSourceFile(unittest.TestCase):
 
     def zipTest(self, f, compression):
         # Create the ZIP archive.
-        zipfp = zipfile.ZipFile(f, "w", compression, allowZip64=True)
+        zipfp = zipfile.ZipFile(f, "w", compression)
 
         # It will contain enough copies of self.data to reach about 6GB of
         # raw data to store.
@@ -92,7 +92,7 @@ class OtherTests(unittest.TestCase):
     def testMoreThan64kFiles(self):
         # This test checks that more than 64k files can be added to an archive,
         # and that the resulting archive can be read properly by ZipFile
-        zipf = zipfile.ZipFile(TESTFN, mode="w")
+        zipf = zipfile.ZipFile(TESTFN, mode="w", allowZip64=False)
         zipf.debug = 100
         numfiles = (1 << 16) * 3//2
         for i in range(numfiles):
index ca2611dc79fb2a27a7ec8f5b345c62644aa3a098..ae65b42f70f9f7d2395892ed00f865ff30498190 100644 (file)
@@ -876,7 +876,7 @@ class ZipExtFile(io.BufferedIOBase):
 class ZipFile:
     """ Class with methods to open, read, write, close, list zip files.
 
-    z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=False)
+    z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=True)
 
     file: Either the path to the file, or a file-like object.
           If it is a path, the file will be opened and closed by ZipFile.
@@ -892,7 +892,7 @@ class ZipFile:
     fp = None                   # Set here since __del__ checks it
     _windows_illegal_name_trans_table = None
 
-    def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=False):
+    def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True):
         """Open the ZIP file with mode read "r", write "w" or append "a"."""
         if mode not in ("r", "w", "a"):
             raise RuntimeError('ZipFile() requires mode "r", "w", or "a"')
@@ -1561,7 +1561,7 @@ class PyZipFile(ZipFile):
     """Class to create ZIP archives with Python library files and packages."""
 
     def __init__(self, file, mode="r", compression=ZIP_STORED,
-                 allowZip64=False, optimize=-1):
+                 allowZip64=True, optimize=-1):
         ZipFile.__init__(self, file, mode=mode, compression=compression,
                          allowZip64=allowZip64)
         self._optimize = optimize
@@ -1783,7 +1783,7 @@ def main(args = None):
                              os.path.join(path, nm), os.path.join(zippath, nm))
             # else: ignore
 
-        with ZipFile(args[1], 'w', allowZip64=True) as zf:
+        with ZipFile(args[1], 'w') as zf:
             for src in args[2:]:
                 addToZip(zf, src, os.path.basename(src))
 
index 9436af8f3f1bfbed7cf6daaa6d18e1dd6218e7bb..8c2aa4d8a19cdef769f88aa024504c3557f68ed1 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -806,6 +806,7 @@ Marek Majkowski
 Grzegorz Makarewicz
 David Malcolm
 Greg Malcolm
+William Mallard
 Ken Manheimer
 Vladimir Marangozov
 Colin Marc
index 879689ae16a0e3fa9b76f4a4c2fc454ea5925b2c..93301ffc57bc359d9da8e76ad983b60cc1fd2f1c 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -68,6 +68,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #17201: ZIP64 extensions now are enabled by default.  Patch by
+  William Mallard.
+
 - Issue #19292: Add SSLContext.load_default_certs() to load default root CA
   certificates from default stores or system stores. By default the method
   loads CA certs for authentication of server certs.