Skip to content

Commit 366fcba

Browse files
authored
bpo-44678: Separate error message for discontinuous padding in binascii.a2b_base64 strict mode (GH-27249)
* Renamed assertLeadingPadding function to match logic * Added a separate error message for discontinuous padding * Updated the tests for discontinuous padding
1 parent e25e43e commit 366fcba

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

Lib/test/test_binascii.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,12 @@ def assertExcessData(data, non_strict_mode_expected_result: bytes):
130130
def assertNonBase64Data(data, non_strict_mode_expected_result: bytes):
131131
_assertRegexTemplate(r'(?i)Only base64 data', data, non_strict_mode_expected_result)
132132

133-
def assertMalformedPadding(data, non_strict_mode_expected_result: bytes):
133+
def assertLeadingPadding(data, non_strict_mode_expected_result: bytes):
134134
_assertRegexTemplate(r'(?i)Leading padding', data, non_strict_mode_expected_result)
135135

136+
def assertDiscontinuousPadding(data, non_strict_mode_expected_result: bytes):
137+
_assertRegexTemplate(r'(?i)Discontinuous padding', data, non_strict_mode_expected_result)
138+
136139
# Test excess data exceptions
137140
assertExcessData(b'ab==a', b'i')
138141
assertExcessData(b'ab===', b'i')
@@ -148,11 +151,11 @@ def assertMalformedPadding(data, non_strict_mode_expected_result: bytes):
148151
assertNonBase64Data(b'a\x00b==', b'i')
149152

150153
# Test malformed padding
151-
assertMalformedPadding(b'=', b'')
152-
assertMalformedPadding(b'==', b'')
153-
assertMalformedPadding(b'===', b'')
154-
assertMalformedPadding(b'ab=c=', b'i\xb7')
155-
assertMalformedPadding(b'ab=ab==', b'i\xb6\x9b')
154+
assertLeadingPadding(b'=', b'')
155+
assertLeadingPadding(b'==', b'')
156+
assertLeadingPadding(b'===', b'')
157+
assertDiscontinuousPadding(b'ab=c=', b'i\xb7')
158+
assertDiscontinuousPadding(b'ab=ab==', b'i\xb6\x9b')
156159

157160

158161
def test_base64errors(self):
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added a separate error message for discontinuous padding in *binascii.a2b_base64* strict mode.

Modules/binascii.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,6 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data, int strict_mode)
464464
unsigned char *bin_data_start = bin_data;
465465

466466
if (strict_mode && ascii_len > 0 && ascii_data[0] == '=') {
467-
malformed_padding:
468467
state = get_binascii_state(module);
469468
if (state) {
470469
PyErr_SetString(state->Error, "Leading padding not allowed");
@@ -516,7 +515,11 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data, int strict_mode)
516515

517516
// Characters that are not '=', in the middle of the padding, are not allowed
518517
if (strict_mode && padding_started) {
519-
goto malformed_padding;
518+
state = get_binascii_state(module);
519+
if (state) {
520+
PyErr_SetString(state->Error, "Discontinuous padding not allowed");
521+
}
522+
goto error_end;
520523
}
521524
pads = 0;
522525

0 commit comments

Comments
 (0)