break
s = s.translate(bytes.maketrans(altchars, b'+/'))
else:
- trans = bytes.maketrans(b'+/' + altchars, altchars + b'+/')
+ trans_in = set(b'+/') - set(altchars)
+ if len(trans_in) == 2:
+ # we can't use the reqult of unordered sets here
+ trans = bytes.maketrans(altchars + b'+/', b'+/' + altchars)
+ else:
+ trans = bytes.maketrans(altchars + bytes(trans_in),
+ b'+/' + bytes(set(altchars) - set(b'+/')))
s = s.translate(trans)
ignorechars = ignorechars.translate(trans)
if ignorechars is _NOT_SPECIFIED:
eq(base64.b64decode(data_str, altchars=altchars_str), res)
eq(base64.b64decode(data, altchars=altchars, ignorechars=b'\n'), res)
+ eq(base64.b64decode(b'/----', altchars=b'-+', ignorechars=b'/'), b'\xfb\xef\xbe')
+ eq(base64.b64decode(b'/----', altchars=b'+-', ignorechars=b'/'), b'\xff\xff\xff')
+ eq(base64.b64decode(b'+----', altchars=b'-/', ignorechars=b'+'), b'\xfb\xef\xbe')
+ eq(base64.b64decode(b'+----', altchars=b'/-', ignorechars=b'+'), b'\xff\xff\xff')
+ eq(base64.b64decode(b'+/+/', altchars=b'/+', ignorechars=b''), b'\xff\xef\xfe')
+ eq(base64.b64decode(b'/+/+', altchars=b'+/', ignorechars=b''), b'\xff\xef\xfe')
+
self.assertRaises(ValueError, base64.b64decode, b'', altchars=b'+')
self.assertRaises(ValueError, base64.b64decode, b'', altchars=b'+/-')
self.assertRaises(ValueError, base64.b64decode, '', altchars='+')