mirror of https://github.com/python/cpython
Merge with 3.2: Correctly detect bzip2 compressed streams with blocksizes other than 900k.
This commit is contained in:
commit
45fb082180
|
@ -624,7 +624,7 @@ class _StreamProxy(object):
|
||||||
def getcomptype(self):
|
def getcomptype(self):
|
||||||
if self.buf.startswith(b"\037\213\010"):
|
if self.buf.startswith(b"\037\213\010"):
|
||||||
return "gz"
|
return "gz"
|
||||||
if self.buf.startswith(b"BZh91"):
|
if self.buf[0:3] == b"BZh" and self.buf[4:10] == b"1AY&SY":
|
||||||
return "bz2"
|
return "bz2"
|
||||||
return "tar"
|
return "tar"
|
||||||
|
|
||||||
|
|
|
@ -529,6 +529,23 @@ class DetectReadTest(unittest.TestCase):
|
||||||
def test_detect_fileobj(self):
|
def test_detect_fileobj(self):
|
||||||
self._test_modes(self._testfunc_fileobj)
|
self._test_modes(self._testfunc_fileobj)
|
||||||
|
|
||||||
|
def test_detect_stream_bz2(self):
|
||||||
|
# Originally, tarfile's stream detection looked for the string
|
||||||
|
# "BZh91" at the start of the file. This is incorrect because
|
||||||
|
# the '9' represents the blocksize (900kB). If the file was
|
||||||
|
# compressed using another blocksize autodetection fails.
|
||||||
|
if not bz2:
|
||||||
|
return
|
||||||
|
|
||||||
|
with open(tarname, "rb") as fobj:
|
||||||
|
data = fobj.read()
|
||||||
|
|
||||||
|
# Compress with blocksize 100kB, the file starts with "BZh11".
|
||||||
|
with bz2.BZ2File(tmpname, "wb", compresslevel=1) as fobj:
|
||||||
|
fobj.write(data)
|
||||||
|
|
||||||
|
self._testfunc_file(tmpname, "r|*")
|
||||||
|
|
||||||
|
|
||||||
class MemberReadTest(ReadTest):
|
class MemberReadTest(ReadTest):
|
||||||
|
|
||||||
|
@ -1818,11 +1835,8 @@ def test_main():
|
||||||
if bz2:
|
if bz2:
|
||||||
# Create testtar.tar.bz2 and add bz2-specific tests.
|
# Create testtar.tar.bz2 and add bz2-specific tests.
|
||||||
support.unlink(bz2name)
|
support.unlink(bz2name)
|
||||||
tar = bz2.BZ2File(bz2name, "wb")
|
with bz2.BZ2File(bz2name, "wb") as tar:
|
||||||
try:
|
|
||||||
tar.write(data)
|
tar.write(data)
|
||||||
finally:
|
|
||||||
tar.close()
|
|
||||||
|
|
||||||
tests += [
|
tests += [
|
||||||
Bz2MiscReadTest,
|
Bz2MiscReadTest,
|
||||||
|
|
|
@ -406,6 +406,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- tarfile.py: Correctly detect bzip2 compressed streams with blocksizes
|
||||||
|
other than 900k.
|
||||||
|
|
||||||
- Issue #13439: Fix many errors in turtle docstrings.
|
- Issue #13439: Fix many errors in turtle docstrings.
|
||||||
|
|
||||||
- Issue #6715: Add a module 'lzma' for compression using the LZMA algorithm.
|
- Issue #6715: Add a module 'lzma' for compression using the LZMA algorithm.
|
||||||
|
|
Loading…
Reference in New Issue