(original) (raw)

changeset: 98636:ff1366ff2761 branch: 2.7 parent: 98626:3ad8a2d34d01 user: Serhiy Storchaka storchaka@gmail.com date: Sat Oct 10 09:33:11 2015 +0300 files: Lib/test/test_codecs.py Objects/unicodeobject.c description: Issue #24848: Fixed yet one bug in UTF-7 decoder. Testing for BASE64 character was locale depending. diff -r 3ad8a2d34d01 -r ff1366ff2761 Lib/test/test_codecs.py --- a/Lib/test/test_codecs.py Sat Oct 10 00:49:10 2015 +0100 +++ b/Lib/test/test_codecs.py Sat Oct 10 09:33:11 2015 +0300 @@ -690,9 +690,9 @@ def test_errors(self): tests = [ - ('\xffb', u'\ufffdb'), - ('a\xffb', u'a\ufffdb'), - ('a\xff\xffb', u'a\ufffd\ufffdb'), + ('\xe1b', u'\ufffdb'), + ('a\xe1b', u'a\ufffdb'), + ('a\xe1\xe1b', u'a\ufffd\ufffdb'), ('a+IK', u'a\ufffd'), ('a+IK-b', u'a\ufffdb'), ('a+IK,b', u'a\ufffdb'), @@ -708,8 +708,8 @@ ('a+//,+IKw-b', u'a\ufffd\u20acb'), ('a+///,+IKw-b', u'a\uffff\ufffd\u20acb'), ('a+////,+IKw-b', u'a\uffff\ufffd\u20acb'), - ('a+IKw-b\xff', u'a\u20acb\ufffd'), - ('a+IKw\xffb', u'a\u20ac\ufffdb'), + ('a+IKw-b\xe1', u'a\u20acb\ufffd'), + ('a+IKw\xe1b', u'a\u20ac\ufffdb'), ] for raw, expected in tests: try: @@ -738,16 +738,16 @@ def test_lone_surrogates(self): tests = [ ('a+2AE-b', u'a\ud801b'), - ('a+2AE\xffb', u'a\ufffdb'), + ('a+2AE\xe1b', u'a\ufffdb'), ('a+2AE', u'a\ufffd'), ('a+2AEA-b', u'a\ufffdb'), ('a+2AH-b', u'a\ufffdb'), ('a+IKzYAQ-b', u'a\u20ac\ud801b'), - ('a+IKzYAQ\xffb', u'a\u20ac\ufffdb'), + ('a+IKzYAQ\xe1b', u'a\u20ac\ufffdb'), ('a+IKzYAQA-b', u'a\u20ac\ufffdb'), ('a+IKzYAd-b', u'a\u20ac\ufffdb'), ('a+IKwgrNgB-b', u'a\u20ac\u20ac\ud801b'), - ('a+IKwgrNgB\xffb', u'a\u20ac\u20ac\ufffdb'), + ('a+IKwgrNgB\xe1b', u'a\u20ac\u20ac\ufffdb'), ('a+IKwgrNgB', u'a\u20ac\u20ac\ufffd'), ('a+IKwgrNgBA-b', u'a\u20ac\u20ac\ufffdb'), ] diff -r 3ad8a2d34d01 -r ff1366ff2761 Objects/unicodeobject.c --- a/Objects/unicodeobject.c Sat Oct 10 00:49:10 2015 +0100 +++ b/Objects/unicodeobject.c Sat Oct 10 09:33:11 2015 +0300 @@ -1555,7 +1555,10 @@ /* Is c a base-64 character? */ #define IS_BASE64(c) \ - (isalnum(c) || (c) == '+' || (c) == '/') + (((c) >= 'A' && (c) <= 'Z') || \ + ((c) >= 'a' && (c) <= 'z') || \ + ((c) >= '0' && (c) <= '9') || \ + (c) == '+' || (c) == '/') /* given that c is a base-64 character, what is its base-64 value? */ /storchaka@gmail.com