Skip to content

Commit

Permalink
Issue python#22088: Port base64 character ignoring doc and test from …
Browse files Browse the repository at this point in the history
…857d9fe60169
  • Loading branch information
vadmium committed Dec 14, 2015
1 parent edd6a81 commit d77fe94
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
6 changes: 3 additions & 3 deletions Doc/library/base64.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ The modern interface, which was introduced in Python 2.4, provides:
length 2 (additional characters are ignored) which specifies the alternative
alphabet used instead of the ``+`` and ``/`` characters.

The decoded string is returned. A :exc:`TypeError` is raised if *s* were
incorrectly padded or if there are non-alphabet characters present in the
string.
The decoded string is returned. A :exc:`TypeError` is raised if *s* is
incorrectly padded. Non-base64-alphabet characters are
discarded prior to the padding check.


.. function:: standard_b64encode(s)
Expand Down
6 changes: 3 additions & 3 deletions Lib/base64.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ def b64decode(s, altchars=None):
length 2 (additional characters are ignored) which specifies the
alternative alphabet used instead of the '+' and '/' characters.
The decoded string is returned. A TypeError is raised if s were
incorrectly padded or if there are non-alphabet characters present in the
string.
The decoded string is returned. A TypeError is raised if s is
incorrectly padded. Non-base64-alphabet characters are discarded prior
to the padding check.
"""
if altchars is not None:
s = s.translate(string.maketrans(altchars[:2], '+/'))
Expand Down
16 changes: 15 additions & 1 deletion Lib/test/test_base64.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,23 @@ def test_b64decode(self):
# Non-bytes
eq(base64.urlsafe_b64decode(bytearray('01a-b_cd')), '\xd3V\xbeo\xf7\x1d')

def test_b64decode_error(self):
def test_b64decode_padding_error(self):
self.assertRaises(TypeError, base64.b64decode, 'abc')

def test_b64decode_invalid_chars(self):
# issue 1466065: Test some invalid characters.
tests = ((b'%3d==', b'\xdd'),
(b'$3d==', b'\xdd'),
(b'[==', b''),
(b'YW]3=', b'am'),
(b'3{d==', b'\xdd'),
(b'3d}==', b'\xdd'),
(b'@@', b''),
(b'!', b''),
(b'YWJj\nYWI=', b'abcab'))
for bstr, res in tests:
self.assertEqual(base64.b64decode(bstr), res)

def test_b32encode(self):
eq = self.assertEqual
eq(base64.b32encode(''), '')
Expand Down

0 comments on commit d77fe94

Please sign in to comment.