Commit dc0365a6 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #18011: base64.b32decode() now raises a binascii.Error if there are

non-alphabet characters present in the input string to conform a docstring.
Updated the module documentation.
parent 027abf36
...@@ -103,7 +103,7 @@ The modern interface provides: ...@@ -103,7 +103,7 @@ The modern interface provides:
digit 0 is always mapped to the letter O). For security purposes the default is digit 0 is always mapped to the letter O). For security purposes the default is
``None``, so that 0 and 1 are not allowed in the input. ``None``, so that 0 and 1 are not allowed in the input.
The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were The decoded byte string is returned. A :exc:`binascii.Error` is raised if *s* were
incorrectly padded or if there are non-alphabet characters present in the incorrectly padded or if there are non-alphabet characters present in the
string. string.
......
...@@ -245,7 +245,7 @@ def b32decode(s, casefold=False, map01=None): ...@@ -245,7 +245,7 @@ def b32decode(s, casefold=False, map01=None):
for c in s: for c in s:
val = _b32rev.get(c) val = _b32rev.get(c)
if val is None: if val is None:
raise TypeError('Non-base32 digit found') raise binascii.Error('Non-base32 digit found')
acc += _b32rev[c] << shift acc += _b32rev[c] << shift
shift -= 5 shift -= 5
if shift < 0: if shift < 0:
......
...@@ -244,8 +244,8 @@ class BaseXYTestCase(unittest.TestCase): ...@@ -244,8 +244,8 @@ class BaseXYTestCase(unittest.TestCase):
eq(base64.b32decode(data, True), res) eq(base64.b32decode(data, True), res)
eq(base64.b32decode(data.decode('ascii'), True), res) eq(base64.b32decode(data.decode('ascii'), True), res)
self.assertRaises(TypeError, base64.b32decode, b'me======') self.assertRaises(binascii.Error, base64.b32decode, b'me======')
self.assertRaises(TypeError, base64.b32decode, 'me======') self.assertRaises(binascii.Error, base64.b32decode, 'me======')
# Mapping zero and one # Mapping zero and one
eq(base64.b32decode(b'MLO23456'), b'b\xdd\xad\xf3\xbe') eq(base64.b32decode(b'MLO23456'), b'b\xdd\xad\xf3\xbe')
...@@ -262,9 +262,11 @@ class BaseXYTestCase(unittest.TestCase): ...@@ -262,9 +262,11 @@ class BaseXYTestCase(unittest.TestCase):
eq(base64.b32decode(data_str, map01=map01), res) eq(base64.b32decode(data_str, map01=map01), res)
eq(base64.b32decode(data, map01=map01_str), res) eq(base64.b32decode(data, map01=map01_str), res)
eq(base64.b32decode(data_str, map01=map01_str), res) eq(base64.b32decode(data_str, map01=map01_str), res)
self.assertRaises(binascii.Error, base64.b32decode, data)
self.assertRaises(binascii.Error, base64.b32decode, data_str)
def test_b32decode_error(self): def test_b32decode_error(self):
for data in [b'abc', b'ABCDEF==']: for data in [b'abc', b'ABCDEF==', b'==ABCDEF']:
with self.assertRaises(binascii.Error): with self.assertRaises(binascii.Error):
base64.b32decode(data) base64.b32decode(data)
with self.assertRaises(binascii.Error): with self.assertRaises(binascii.Error):
......
...@@ -24,6 +24,10 @@ Core and Builtins ...@@ -24,6 +24,10 @@ Core and Builtins
Library Library
------- -------
- Issue #18011: base64.b32decode() now raises a binascii.Error if there are
non-alphabet characters present in the input string to conform a docstring.
Updated the module documentation.
- Issue #13772: Restored directory detection of targets in ``os.symlink`` on - Issue #13772: Restored directory detection of targets in ``os.symlink`` on
Windows, which was temporarily removed in Python 3.2.3 due to an incomplete Windows, which was temporarily removed in Python 3.2.3 due to an incomplete
implementation. The implementation now works even if the symlink is created implementation. The implementation now works even if the symlink is created
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment