Issue #17201: ZIP64 extensions now are enabled by default.
Patch by William Mallard.
This commit is contained in:
parent
8b78493d4f
commit
235c5e0dd6
|
@ -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
|
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
|
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
|
: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`
|
(:mod:`zlib`, :mod:`bz2` or :mod:`lzma`) is not available, :exc:`RuntimeError`
|
||||||
is also raised. The default is :const:`ZIP_STORED`. If *allowZip64* is
|
is also raised. The default is :const:`ZIP_STORED`. If *allowZip64* is
|
||||||
``True`` zipfile will create ZIP files that use the ZIP64 extensions when
|
``True`` (the default) zipfile will create ZIP files that use the ZIP64
|
||||||
the zipfile is larger than 2 GiB. If it is false (the default) :mod:`zipfile`
|
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.
|
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
|
If the file is created with mode ``'a'`` or ``'w'`` and then
|
||||||
:meth:`closed <close>` without adding any files to the archive, the appropriate
|
:meth:`closed <close>` without adding any files to the archive, the appropriate
|
||||||
|
@ -171,6 +168,9 @@ ZipFile Objects
|
||||||
.. versionchanged:: 3.3
|
.. versionchanged:: 3.3
|
||||||
Added support for :mod:`bzip2 <bz2>` and :mod:`lzma` compression.
|
Added support for :mod:`bzip2 <bz2>` and :mod:`lzma` compression.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.4
|
||||||
|
ZIP64 extensions are enabled by default.
|
||||||
|
|
||||||
|
|
||||||
.. method:: ZipFile.close()
|
.. method:: ZipFile.close()
|
||||||
|
|
||||||
|
@ -374,12 +374,15 @@ PyZipFile Objects
|
||||||
The :class:`PyZipFile` constructor takes the same parameters as the
|
The :class:`PyZipFile` constructor takes the same parameters as the
|
||||||
:class:`ZipFile` constructor, and one additional parameter, *optimize*.
|
: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)
|
optimize=-1)
|
||||||
|
|
||||||
.. versionadded:: 3.2
|
.. versionadded:: 3.2
|
||||||
The *optimize* parameter.
|
The *optimize* parameter.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.4
|
||||||
|
ZIP64 extensions are enabled by default.
|
||||||
|
|
||||||
Instances have one method in addition to those of :class:`ZipFile` objects:
|
Instances have one method in addition to those of :class:`ZipFile` objects:
|
||||||
|
|
||||||
.. method:: PyZipFile.writepy(pathname, basename='', filterfunc=None)
|
.. method:: PyZipFile.writepy(pathname, basename='', filterfunc=None)
|
||||||
|
|
|
@ -506,12 +506,12 @@ class StoredTestZip64InSmallFiles(AbstractTestZip64InSmallFiles,
|
||||||
compression = zipfile.ZIP_STORED
|
compression = zipfile.ZIP_STORED
|
||||||
|
|
||||||
def large_file_exception_test(self, f, compression):
|
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,
|
self.assertRaises(zipfile.LargeZipFile,
|
||||||
zipfp.write, TESTFN, "another.name")
|
zipfp.write, TESTFN, "another.name")
|
||||||
|
|
||||||
def large_file_exception_test2(self, f, compression):
|
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,
|
self.assertRaises(zipfile.LargeZipFile,
|
||||||
zipfp.writestr, "another.name", self.data)
|
zipfp.writestr, "another.name", self.data)
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class TestsWithSourceFile(unittest.TestCase):
|
||||||
|
|
||||||
def zipTest(self, f, compression):
|
def zipTest(self, f, compression):
|
||||||
# Create the ZIP archive.
|
# 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
|
# It will contain enough copies of self.data to reach about 6GB of
|
||||||
# raw data to store.
|
# raw data to store.
|
||||||
|
@ -92,7 +92,7 @@ class OtherTests(unittest.TestCase):
|
||||||
def testMoreThan64kFiles(self):
|
def testMoreThan64kFiles(self):
|
||||||
# This test checks that more than 64k files can be added to an archive,
|
# 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
|
# 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
|
zipf.debug = 100
|
||||||
numfiles = (1 << 16) * 3//2
|
numfiles = (1 << 16) * 3//2
|
||||||
for i in range(numfiles):
|
for i in range(numfiles):
|
||||||
|
|
|
@ -876,7 +876,7 @@ class ZipExtFile(io.BufferedIOBase):
|
||||||
class ZipFile:
|
class ZipFile:
|
||||||
""" Class with methods to open, read, write, close, list zip files.
|
""" 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.
|
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.
|
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
|
fp = None # Set here since __del__ checks it
|
||||||
_windows_illegal_name_trans_table = None
|
_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"."""
|
"""Open the ZIP file with mode read "r", write "w" or append "a"."""
|
||||||
if mode not in ("r", "w", "a"):
|
if mode not in ("r", "w", "a"):
|
||||||
raise RuntimeError('ZipFile() requires mode "r", "w", or "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."""
|
"""Class to create ZIP archives with Python library files and packages."""
|
||||||
|
|
||||||
def __init__(self, file, mode="r", compression=ZIP_STORED,
|
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,
|
ZipFile.__init__(self, file, mode=mode, compression=compression,
|
||||||
allowZip64=allowZip64)
|
allowZip64=allowZip64)
|
||||||
self._optimize = optimize
|
self._optimize = optimize
|
||||||
|
@ -1783,7 +1783,7 @@ def main(args = None):
|
||||||
os.path.join(path, nm), os.path.join(zippath, nm))
|
os.path.join(path, nm), os.path.join(zippath, nm))
|
||||||
# else: ignore
|
# else: ignore
|
||||||
|
|
||||||
with ZipFile(args[1], 'w', allowZip64=True) as zf:
|
with ZipFile(args[1], 'w') as zf:
|
||||||
for src in args[2:]:
|
for src in args[2:]:
|
||||||
addToZip(zf, src, os.path.basename(src))
|
addToZip(zf, src, os.path.basename(src))
|
||||||
|
|
||||||
|
|
|
@ -806,6 +806,7 @@ Marek Majkowski
|
||||||
Grzegorz Makarewicz
|
Grzegorz Makarewicz
|
||||||
David Malcolm
|
David Malcolm
|
||||||
Greg Malcolm
|
Greg Malcolm
|
||||||
|
William Mallard
|
||||||
Ken Manheimer
|
Ken Manheimer
|
||||||
Vladimir Marangozov
|
Vladimir Marangozov
|
||||||
Colin Marc
|
Colin Marc
|
||||||
|
|
|
@ -68,6 +68,9 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #19292: Add SSLContext.load_default_certs() to load default root CA
|
||||||
certificates from default stores or system stores. By default the method
|
certificates from default stores or system stores. By default the method
|
||||||
loads CA certs for authentication of server certs.
|
loads CA certs for authentication of server certs.
|
||||||
|
|
Loading…
Reference in New Issue