def assertNonBase64Data(data, non_strict_mode_expected_result: bytes):
_assertRegexTemplate(r'(?i)Only base64 data', data, non_strict_mode_expected_result)
- def assertMalformedPadding(data, non_strict_mode_expected_result: bytes):
+ def assertLeadingPadding(data, non_strict_mode_expected_result: bytes):
_assertRegexTemplate(r'(?i)Leading padding', data, non_strict_mode_expected_result)
+ def assertDiscontinuousPadding(data, non_strict_mode_expected_result: bytes):
+ _assertRegexTemplate(r'(?i)Discontinuous padding', data, non_strict_mode_expected_result)
+
# Test excess data exceptions
assertExcessData(b'ab==a', b'i')
assertExcessData(b'ab===', b'i')
assertNonBase64Data(b'a\x00b==', b'i')
# Test malformed padding
- assertMalformedPadding(b'=', b'')
- assertMalformedPadding(b'==', b'')
- assertMalformedPadding(b'===', b'')
- assertMalformedPadding(b'ab=c=', b'i\xb7')
- assertMalformedPadding(b'ab=ab==', b'i\xb6\x9b')
+ assertLeadingPadding(b'=', b'')
+ assertLeadingPadding(b'==', b'')
+ assertLeadingPadding(b'===', b'')
+ assertDiscontinuousPadding(b'ab=c=', b'i\xb7')
+ assertDiscontinuousPadding(b'ab=ab==', b'i\xb6\x9b')
def test_base64errors(self):
unsigned char *bin_data_start = bin_data;
if (strict_mode && ascii_len > 0 && ascii_data[0] == '=') {
- malformed_padding:
state = get_binascii_state(module);
if (state) {
PyErr_SetString(state->Error, "Leading padding not allowed");
// Characters that are not '=', in the middle of the padding, are not allowed
if (strict_mode && padding_started) {
- goto malformed_padding;
+ state = get_binascii_state(module);
+ if (state) {
+ PyErr_SetString(state->Error, "Discontinuous padding not allowed");
+ }
+ goto error_end;
}
pads = 0;