From 11ea63826a40a6fd41239f40a217c66c2b30ef73 Mon Sep 17 00:00:00 2001 From: Idan Moral Date: Mon, 19 Jul 2021 21:02:21 +0300 Subject: [PATCH 1/5] Renamed assertLeadingPadding function to match logic --- Lib/test/test_binascii.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py index 74438d837852c8..4be1ac0b5cd3dc 100644 --- a/Lib/test/test_binascii.py +++ b/Lib/test/test_binascii.py @@ -130,7 +130,7 @@ def assertExcessData(data, non_strict_mode_expected_result: bytes): 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) # Test excess data exceptions @@ -148,11 +148,11 @@ def assertMalformedPadding(data, non_strict_mode_expected_result: bytes): 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'') + assertLeadingPadding(b'ab=c=', b'i\xb7') + assertLeadingPadding(b'ab=ab==', b'i\xb6\x9b') def test_base64errors(self): From 00e63a9d864850d99ac33518adb05b8ab2f401e7 Mon Sep 17 00:00:00 2001 From: Idan Moral Date: Mon, 19 Jul 2021 21:02:44 +0300 Subject: [PATCH 2/5] Added a seperate error message for discontinuous padding --- Modules/binascii.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Modules/binascii.c b/Modules/binascii.c index 50f25b406a924e..e80eb2af49cf7e 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -464,7 +464,6 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data, int strict_mode) 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"); @@ -516,7 +515,11 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data, int strict_mode) // 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; From 45bfb77f9e02d11fe828c731372eaab9b8754420 Mon Sep 17 00:00:00 2001 From: Idan Moral Date: Mon, 19 Jul 2021 21:04:54 +0300 Subject: [PATCH 3/5] Updated the tests for discontinuous padding --- Lib/test/test_binascii.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py index 4be1ac0b5cd3dc..da8f9d1f213f7d 100644 --- a/Lib/test/test_binascii.py +++ b/Lib/test/test_binascii.py @@ -133,6 +133,9 @@ def assertNonBase64Data(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') @@ -151,8 +154,8 @@ def assertLeadingPadding(data, non_strict_mode_expected_result: bytes): assertLeadingPadding(b'=', b'') assertLeadingPadding(b'==', b'') assertLeadingPadding(b'===', b'') - assertLeadingPadding(b'ab=c=', b'i\xb7') - assertLeadingPadding(b'ab=ab==', b'i\xb6\x9b') + assertDiscontinuousPadding(b'ab=c=', b'i\xb7') + assertDiscontinuousPadding(b'ab=ab==', b'i\xb6\x9b') def test_base64errors(self): From 9501e7ef47c482ffe75d4c520f2043e057b40bdb Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Mon, 19 Jul 2021 18:45:01 +0000 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst diff --git a/Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst b/Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst new file mode 100644 index 00000000000000..15326d0b09a9f7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst @@ -0,0 +1 @@ +Added a seperate error message for discontinuous padding in *binascii.a2b_base64* strict mode. \ No newline at end of file From beb8f043d0fd099e0a3dd46f3d4e19d4dbc5628c Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Mon, 19 Jul 2021 15:10:25 -0700 Subject: [PATCH 5/5] seperate -> separate --- .../next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst b/Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst index 15326d0b09a9f7..991b1579b2e2b6 100644 --- a/Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst +++ b/Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst @@ -1 +1 @@ -Added a seperate error message for discontinuous padding in *binascii.a2b_base64* strict mode. \ No newline at end of file +Added a separate error message for discontinuous padding in *binascii.a2b_base64* strict mode.