@@ -110,6 +110,34 @@ def addnoise(line):
110110 # empty strings. TBD: shouldn't it raise an exception instead ?
111111 self .assertEqual (binascii .a2b_base64 (self .type2test (fillers )), b'' )
112112
113+ def test_base64errors (self ):
114+ # Test base64 with invalid padding
115+ def assertIncorrectPadding (data ):
116+ with self .assertRaisesRegex (binascii .Error , r'(?i)Incorrect padding' ):
117+ binascii .a2b_base64 (self .type2test (data ))
118+
119+ assertIncorrectPadding (b'ab' )
120+ assertIncorrectPadding (b'ab=' )
121+ assertIncorrectPadding (b'abc' )
122+ assertIncorrectPadding (b'abcdef' )
123+ assertIncorrectPadding (b'abcdef=' )
124+ assertIncorrectPadding (b'abcdefg' )
125+ assertIncorrectPadding (b'a=b=' )
126+ assertIncorrectPadding (b'a\n b=' )
127+
128+ # Test base64 with invalid number of valid characters (1 mod 4)
129+ def assertInvalidLength (data ):
130+ with self .assertRaisesRegex (binascii .Error , r'(?i)invalid.+length' ):
131+ binascii .a2b_base64 (self .type2test (data ))
132+
133+ assertInvalidLength (b'a' )
134+ assertInvalidLength (b'a=' )
135+ assertInvalidLength (b'a==' )
136+ assertInvalidLength (b'a===' )
137+ assertInvalidLength (b'a' * 5 )
138+ assertInvalidLength (b'a' * (4 * 87 + 1 ))
139+ assertInvalidLength (b'A\t B\n C ??DE' ) # only 5 valid characters
140+
113141 def test_uu (self ):
114142 MAX_UU = 45
115143 for backtick in (True , False ):
0 commit comments