@@ -50,6 +50,7 @@ class BaseTest(unittest.TestCase):
5050 TEXT = b'' .join (TEXT_LINES )
5151 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`'
5252 EMPTY_DATA = b'BZh9\x17 rE8P\x90 \x00 \x00 \x00 \x00 '
53+ BAD_DATA = b'this is not a valid bzip2 file'
5354
5455 def setUp (self ):
5556 self .filename = support .TESTFN
@@ -80,9 +81,10 @@ def decompress(self, data):
8081class BZ2FileTest (BaseTest ):
8182 "Test the BZ2File class."
8283
83- def createTempFile (self , streams = 1 ):
84+ def createTempFile (self , streams = 1 , suffix = b"" ):
8485 with open (self .filename , "wb" ) as f :
8586 f .write (self .DATA * streams )
87+ f .write (suffix )
8688
8789 def testBadArgs (self ):
8890 self .assertRaises (TypeError , BZ2File , 123.456 )
@@ -98,6 +100,11 @@ def testRead(self):
98100 self .assertRaises (TypeError , bz2f .read , None )
99101 self .assertEqual (bz2f .read (), self .TEXT )
100102
103+ def testReadBadFile (self ):
104+ self .createTempFile (streams = 0 , suffix = self .BAD_DATA )
105+ with BZ2File (self .filename ) as bz2f :
106+ self .assertRaises (OSError , bz2f .read )
107+
101108 def testReadMultiStream (self ):
102109 self .createTempFile (streams = 5 )
103110 with BZ2File (self .filename ) as bz2f :
@@ -117,6 +124,16 @@ def testReadMonkeyMultiStream(self):
117124 finally :
118125 bz2 ._BUFFER_SIZE = buffer_size
119126
127+ def testReadTrailingJunk (self ):
128+ self .createTempFile (suffix = self .BAD_DATA )
129+ with BZ2File (self .filename ) as bz2f :
130+ self .assertEqual (bz2f .read (), self .TEXT )
131+
132+ def testReadMultiStreamTrailingJunk (self ):
133+ self .createTempFile (streams = 5 , suffix = self .BAD_DATA )
134+ with BZ2File (self .filename ) as bz2f :
135+ self .assertEqual (bz2f .read (), self .TEXT * 5 )
136+
120137 def testRead0 (self ):
121138 self .createTempFile ()
122139 with BZ2File (self .filename ) as bz2f :
@@ -714,10 +731,21 @@ def testDecompressToEmptyString(self):
714731 def testDecompressIncomplete (self ):
715732 self .assertRaises (ValueError , bz2 .decompress , self .DATA [:- 10 ])
716733
734+ def testDecompressBadData (self ):
735+ self .assertRaises (OSError , bz2 .decompress , self .BAD_DATA )
736+
717737 def testDecompressMultiStream (self ):
718738 text = bz2 .decompress (self .DATA * 5 )
719739 self .assertEqual (text , self .TEXT * 5 )
720740
741+ def testDecompressTrailingJunk (self ):
742+ text = bz2 .decompress (self .DATA + self .BAD_DATA )
743+ self .assertEqual (text , self .TEXT )
744+
745+ def testDecompressMultiStreamTrailingJunk (self ):
746+ text = bz2 .decompress (self .DATA * 5 + self .BAD_DATA )
747+ self .assertEqual (text , self .TEXT * 5 )
748+
721749
722750class OpenTest (BaseTest ):
723751 "Test the open function."
0 commit comments