@@ -49,6 +49,7 @@ class BaseTest(unittest.TestCase):
4949 TEXT = b'' .join (TEXT_LINES )
5050 DATA = b'BZh91AY&SY.\xc8 N\x18 \x00 \x01 >_\x80 \x00 \x10 @\x02 \xff \xf0 \x01 \x07 n\x00 ?\xe7 \xff \xe0 0\x01 \x99 \xaa \x00 \xc0 \x03 F\x86 \x8c #&\x83 F\x9a \x03 \x06 \xa6 \xd0 \xa6 \x93 M\x0f Q\xa7 \xa8 \x06 \x80 4hh\x12 $\x11 \xa4 i4\xf1 4S\xd2 <Q\xb5 \x0f H\xd3 \xd4 \xdd \xd5 \x87 \xbb \xf8 \x94 \r \x8f \xaf I\x12 \xe1 \xc9 \xf8 /E\x00 pu\x89 \x12 ]\xc9 \xbb DL\n Q\x0e \t 1\x12 \xdf \xa0 \xc0 \x97 \xac 2O9\x89 \x13 \x94 \x0e \x1c 7\x0e d\x95 I\x0c \xaa J\xa4 \x18 L\x10 \x05 #\x9c \xaf \xba \xbc /\x97 \x8a #C\xc8 \xe1 \x8c W\xf9 \xe2 \xd0 \xd6 M\xa7 \x8b Xa<e\x84 t\xcb L\xb3 \xa7 \xd9 \xcd \xd1 \xcb \x84 .\xaf \xb3 \xab \xab \xad `n}\xa0 lh\t E,\x8e Z\x15 \x17 VH>\x88 \xe5 \xcd 9gd6\x0b \n \xe9 \x9b \xd5 \x8a \x99 \xf7 \x08 .K\x8e v\xfb \xf7 xw\xbb \xdf \xa1 \x92 \xf1 \xdd |/";\xa2 \xba \x9f \xd5 \xb1 #A\xb6 \xf6 \xb3 o\xc9 \xc5 y\\ \xeb O\xe7 \x85 \x9a \xbc \xb6 f8\x95 2\xd5 \xd7 "%\x89 >V,\xf7 \xa6 z\xe2 \x9f \xa3 \xdf \x11 \x11 "\xd6 E)I\xa9 \x13 ^\xca \xf3 r\xd0 \x03 U\x92 2\xf2 6\xec \xb6 \xed \x8b \xc3 U\x13 \x9d \xc5 \x17 0\xa4 \xfa ^\x92 \xac DF\x8a \x97 \xd6 \x19 \xfe \xdd \xb8 \xbd \x1a \x9a \x19 \xa3 \x80 ankR\x8b \xe5 \xd8 3]\xa9 \xc6 \x08 \x82 f\xf6 \xb9 "6l$\xb8 j@\xc0 \x8a \xb0 l1..\xba k\x83 ls\x15 \xbc \xf4 \xc1 \x13 \xbe \xf8 E\xb8 \x9d \r \xa8 \x9d k\x84 \xd3 n\xfa \xac Q\x07 \xb1 %y\xaa v\xb4 \x08 \xe0 z\x1b \x16 \xf5 \x04 \xe9 \xcc \xb9 \x08 z\x1e n7.G\xfc ]\xc9 \x14 \xe1 B@\xbb !8`'
5151 EMPTY_DATA = b'BZh9\x17 rE8P\x90 \x00 \x00 \x00 \x00 '
52+ BAD_DATA = b'this is not a valid bzip2 file'
5253
5354 def setUp (self ):
5455 self .filename = TESTFN
@@ -79,9 +80,10 @@ def decompress(self, data):
7980class BZ2FileTest (BaseTest ):
8081 "Test BZ2File type miscellaneous methods."
8182
82- def createTempFile (self , streams = 1 ):
83+ def createTempFile (self , streams = 1 , suffix = b"" ):
8384 with open (self .filename , "wb" ) as f :
8485 f .write (self .DATA * streams )
86+ f .write (suffix )
8587
8688 def testBadArgs (self ):
8789 with self .assertRaises (TypeError ):
@@ -103,6 +105,11 @@ def testRead(self):
103105 self .assertRaises (TypeError , bz2f .read , None )
104106 self .assertEqual (bz2f .read (), self .TEXT )
105107
108+ def testReadBadFile (self ):
109+ self .createTempFile (streams = 0 , suffix = self .BAD_DATA )
110+ with BZ2File (self .filename ) as bz2f :
111+ self .assertRaises (OSError , bz2f .read )
112+
106113 def testReadMultiStream (self ):
107114 self .createTempFile (streams = 5 )
108115 with BZ2File (self .filename ) as bz2f :
@@ -122,6 +129,16 @@ def testReadMonkeyMultiStream(self):
122129 finally :
123130 bz2 ._BUFFER_SIZE = buffer_size
124131
132+ def testReadTrailingJunk (self ):
133+ self .createTempFile (suffix = self .BAD_DATA )
134+ with BZ2File (self .filename ) as bz2f :
135+ self .assertEqual (bz2f .read (), self .TEXT )
136+
137+ def testReadMultiStreamTrailingJunk (self ):
138+ self .createTempFile (streams = 5 , suffix = self .BAD_DATA )
139+ with BZ2File (self .filename ) as bz2f :
140+ self .assertEqual (bz2f .read (), self .TEXT * 5 )
141+
125142 def testRead0 (self ):
126143 self .createTempFile ()
127144 with BZ2File (self .filename ) as bz2f :
@@ -707,10 +724,21 @@ def testDecompressToEmptyString(self):
707724 def testDecompressIncomplete (self ):
708725 self .assertRaises (ValueError , bz2 .decompress , self .DATA [:- 10 ])
709726
727+ def testDecompressBadData (self ):
728+ self .assertRaises (OSError , bz2 .decompress , self .BAD_DATA )
729+
710730 def testDecompressMultiStream (self ):
711731 text = bz2 .decompress (self .DATA * 5 )
712732 self .assertEqual (text , self .TEXT * 5 )
713733
734+ def testDecompressTrailingJunk (self ):
735+ text = bz2 .decompress (self .DATA + self .BAD_DATA )
736+ self .assertEqual (text , self .TEXT )
737+
738+ def testDecompressMultiStreamTrailingJunk (self ):
739+ text = bz2 .decompress (self .DATA * 5 + self .BAD_DATA )
740+ self .assertEqual (text , self .TEXT * 5 )
741+
714742
715743class OpenTest (BaseTest ):
716744 def test_binary_modes (self ):
0 commit comments