@@ -343,12 +343,12 @@ def test_base64errors(self):
343343 # Test base64 with invalid padding
344344 def assertIncorrectPadding (data , strict_mode = True ):
345345 data = self .type2test (data )
346- with self .assertRaisesRegex (binascii .Error , r'(?i)Incorrect padding' ):
346+ with self .assertRaisesRegex (binascii .Incomplete , r'(?i)Incorrect padding' ):
347347 binascii .a2b_base64 (data )
348- with self .assertRaisesRegex (binascii .Error , r'(?i)Incorrect padding' ):
348+ with self .assertRaisesRegex (binascii .Incomplete , r'(?i)Incorrect padding' ):
349349 binascii .a2b_base64 (data , strict_mode = False )
350350 if strict_mode :
351- with self .assertRaisesRegex (binascii .Error , r'(?i)Incorrect padding' ):
351+ with self .assertRaisesRegex (binascii .Incomplete , r'(?i)Incorrect padding' ):
352352 binascii .a2b_base64 (data , strict_mode = True )
353353
354354 assertIncorrectPadding (b'ab' )
@@ -361,18 +361,23 @@ def assertIncorrectPadding(data, strict_mode=True):
361361 assertIncorrectPadding (b'a\n b=' , strict_mode = False )
362362
363363 # Test base64 with invalid number of valid characters (1 mod 4)
364- def assertInvalidLength (data , strict_mode = True ):
364+ def assertInvalidLength (data , strict_mode = True , incomplete = True ):
365+ strict_incomplete = b'=' not in data
365366 n_data_chars = len (re .sub (br'[^A-Za-z0-9/+]' , br'' , data ))
366367 data = self .type2test (data )
367368 expected_errmsg_re = \
368369 r'(?i)Invalid.+number of data characters.+' + str (n_data_chars )
369- with self .assertRaisesRegex (binascii .Error , expected_errmsg_re ):
370+ with self .assertRaisesRegex (binascii .Incomplete , expected_errmsg_re ):
370371 binascii .a2b_base64 (data )
371- with self .assertRaisesRegex (binascii .Error , expected_errmsg_re ):
372+ with self .assertRaisesRegex (binascii .Incomplete , expected_errmsg_re ):
372373 binascii .a2b_base64 (data , strict_mode = False )
373374 if strict_mode :
374- with self .assertRaisesRegex (binascii .Error , expected_errmsg_re ):
375- binascii .a2b_base64 (data , strict_mode = True )
375+ if strict_incomplete :
376+ with self .assertRaisesRegex (binascii .Incomplete , expected_errmsg_re ):
377+ binascii .a2b_base64 (data , strict_mode = True )
378+ else :
379+ with self .assertRaisesRegex (binascii .Error , expected_errmsg_re ):
380+ binascii .a2b_base64 (data , strict_mode = True )
376381
377382 assertInvalidLength (b'a' )
378383 assertInvalidLength (b'a=' )
@@ -495,12 +500,14 @@ def addnoise(line):
495500 self .assertEqual (b , b"" )
496501
497502 def test_ascii85_errors (self ):
498- def _assertRegexTemplate (assert_regex , data , ** kwargs ):
499- with self .assertRaisesRegex (binascii .Error , assert_regex ):
503+ def _assertRegexTemplate (assert_regex , data , * ,
504+ expected_errtype = binascii .Error , ** kwargs ):
505+ with self .assertRaisesRegex (expected_errtype , assert_regex ):
500506 binascii .a2b_ascii85 (self .type2test (data ), ** kwargs )
501507
502508 def assertMissingDelimiter (data ):
503- _assertRegexTemplate (r"(?i)end with b'~>'" , data , adobe = True )
509+ _assertRegexTemplate (r"(?i)end with b'~>'" , data , adobe = True ,
510+ expected_errtype = binascii .Incomplete )
504511
505512 def assertOverflow (data ):
506513 _assertRegexTemplate (r"(?i)Ascii85 overflow" , data )
@@ -792,8 +799,9 @@ def _fixPadding(data):
792799 p = 8 - len_8 if len_8 else 0
793800 return fixed + b"=" * p
794801
795- def _assertRegexTemplate (assert_regex , data , good_padding_result = None , ** kwargs ):
796- with self .assertRaisesRegex (binascii .Error , assert_regex ):
802+ def _assertRegexTemplate (assert_regex , data , good_padding_result = None , * ,
803+ expected_errtype = binascii .Error , ** kwargs ):
804+ with self .assertRaisesRegex (expected_errtype , assert_regex ):
797805 binascii .a2b_base32 (self .type2test (data ), ** kwargs )
798806 if good_padding_result :
799807 fixed = self .type2test (_fixPadding (data ))
@@ -812,16 +820,21 @@ def assertLeadingPadding(*args, **kwargs):
812820 _assertRegexTemplate (r"(?i)Leading padding" , * args , ** kwargs )
813821
814822 def assertIncorrectPadding (* args ):
815- _assertRegexTemplate (r"(?i)Incorrect padding" , * args )
823+ _assertRegexTemplate (r"(?i)Incorrect padding" , * args ,
824+ expected_errtype = binascii .Incomplete )
816825
817826 def assertDiscontinuousPadding (* args ):
818827 _assertRegexTemplate (r"(?i)Discontinuous padding" , * args )
819828
820829 def assertInvalidLength (data , * args , length = None , ** kwargs ):
821830 if length is None :
822831 length = len (data .split (b'=' , 1 )[0 ].replace (b' ' , b'' ))
832+ incomplete = b'=' not in data
833+ expected_errtype = binascii .Incomplete if incomplete else binascii .Error
823834 assert_regex = fr"(?i)Invalid.+number of data characters \({ length } \)"
824- _assertRegexTemplate (assert_regex , data , * args , ** kwargs )
835+ _assertRegexTemplate (assert_regex , data , * args ,
836+ expected_errtype = expected_errtype ,
837+ ** kwargs )
825838
826839 assertNonBase32Data (b"a" )
827840 assertNonBase32Data (b"AA-" )
@@ -1098,7 +1111,7 @@ def test_hex(self):
10981111 t = binascii .b2a_hex (self .type2test (s ))
10991112 u = binascii .a2b_hex (self .type2test (t ))
11001113 self .assertEqual (s , u )
1101- self .assertRaises (binascii .Error , binascii .a2b_hex , t [:- 1 ])
1114+ self .assertRaises (binascii .Incomplete , binascii .a2b_hex , t [:- 1 ])
11021115 self .assertRaises (binascii .Error , binascii .a2b_hex , t [:- 1 ] + b'q' )
11031116 self .assertRaises (binascii .Error , binascii .a2b_hex , bytes ([255 , 255 ]))
11041117 self .assertRaises (binascii .Error , binascii .a2b_hex , b'0G' )
0 commit comments