diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py index a3f7c7b832ca68..c8dbf3fec40bb7 100644 --- a/Lib/test/test_binascii.py +++ b/Lib/test/test_binascii.py @@ -171,8 +171,8 @@ def _assertRegexTemplate(assert_regex, data, self.assertEqual(binascii.a2b_base64(data), non_strict_mode_expected_result) - def assertLeadingPadding(*args): - _assertRegexTemplate(r'(?i)Leading padding', *args) + def assertLeadingPadding(*args, **kwargs): + _assertRegexTemplate(r'(?i)Leading padding', *args, **kwargs) def assertDiscontinuousPadding(*args): _assertRegexTemplate(r'(?i)Discontinuous padding', *args) @@ -203,6 +203,7 @@ def assertInvalidLength(data, *args, length=None, **kwargs): assertLeadingPadding(b'===abcd', b'i\xb7\x1d') assertLeadingPadding(b'====abcd', b'i\xb7\x1d') assertLeadingPadding(b'=====abcd', b'i\xb7\x1d') + assertLeadingPadding(b' =abcd', b'i\xb7\x1d', ignorechars=b' ') assertInvalidLength(b'a=b==', b'i') assertInvalidLength(b'a=bc=', b'i\xb7') @@ -785,8 +786,8 @@ def assertExcessData(*args): def assertExcessPadding(*args): _assertRegexTemplate(r"(?i)Excess padding", *args) - def assertLeadingPadding(*args): - _assertRegexTemplate(r"(?i)Leading padding", *args) + def assertLeadingPadding(*args, **kwargs): + _assertRegexTemplate(r"(?i)Leading padding", *args, **kwargs) def assertIncorrectPadding(*args): _assertRegexTemplate(r"(?i)Incorrect padding", *args) @@ -853,6 +854,7 @@ def assertInvalidLength(data, *args, length=None, **kwargs): assertLeadingPadding(b"=======BEEFCAKE", b"\t\x08Q\x01D") assertLeadingPadding(b"========BEEFCAKE", b"\t\x08Q\x01D") assertLeadingPadding(b"=========BEEFCAKE", b"\t\x08Q\x01D") + assertLeadingPadding(b" =BEEFCAKE", ignorechars=b' ') assertIncorrectPadding(b"AB") assertIncorrectPadding(b"ABCD") diff --git a/Modules/binascii.c b/Modules/binascii.c index f28c0d472bba27..d0ef2d2d2cc4ce 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -816,8 +816,9 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data, int strict_mode, } state = get_binascii_state(module); if (state) { + unsigned char *bin_data_start = PyBytesWriter_GetData(writer); PyErr_SetString(state->Error, - (quad_pos == 0 && ascii_data == data->buf) + (quad_pos == 0 && bin_data == bin_data_start) ? "Leading padding not allowed" : "Excess padding not allowed"); } @@ -1601,8 +1602,9 @@ binascii_a2b_base32_impl(PyObject *module, Py_buffer *data, } state = get_binascii_state(module); if (state) { + unsigned char *bin_data_start = PyBytesWriter_GetData(writer); PyErr_SetString(state->Error, - (octa_pos == 0 && ascii_data == data->buf) + (octa_pos == 0 && bin_data == bin_data_start) ? "Leading padding not allowed" : "Excess padding not allowed"); }