mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Correctly detect bzip2 compressed streams with blocksizes other than 900k.
This commit is contained in:
parent
22da68b1b0
commit
9a38863d8c
3 changed files with 21 additions and 1 deletions
|
@ -627,7 +627,7 @@ class _StreamProxy(object):
|
|||
def getcomptype(self):
|
||||
if self.buf.startswith("\037\213\010"):
|
||||
return "gz"
|
||||
if self.buf.startswith("BZh91"):
|
||||
if self.buf[0:3] == "BZh" and self.buf[4:10] == "1AY&SY":
|
||||
return "bz2"
|
||||
return "tar"
|
||||
|
||||
|
|
|
@ -440,6 +440,23 @@ class DetectReadTest(unittest.TestCase):
|
|||
def test_detect_fileobj(self):
|
||||
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):
|
||||
|
||||
|
|
|
@ -79,6 +79,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- tarfile.py: Correctly detect bzip2 compressed streams with blocksizes
|
||||
other than 900k.
|
||||
|
||||
- Issue #13439: Fix many errors in turtle docstrings.
|
||||
|
||||
- Issue #12856: Ensure child processes do not inherit the parent's random
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue