[Python-checkins] cpython (2.7): Issue #24848: Fixed yet one bug in UTF-7 decoder. Testing for BASE64 character

serhiy.storchaka python-checkins at python.org
Sat Oct 10 02:33:52 EDT 2015


https://hg.python.org/cpython/rev/ff1366ff2761
changeset:   98636:ff1366ff2761
branch:      2.7
parent:      98626:3ad8a2d34d01
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Sat Oct 10 09:33:11 2015 +0300
summary:
  Issue #24848: Fixed yet one bug in UTF-7 decoder.  Testing for BASE64 character
was locale depending.

files:
  Lib/test/test_codecs.py |  16 ++++++++--------
  Objects/unicodeobject.c |   5 ++++-
  2 files changed, 12 insertions(+), 9 deletions(-)


diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -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 --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -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? */
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list