]> granicus.if.org Git - python/commitdiff
Issue #24848: Fixed yet one bug in UTF-7 decoder. Testing for BASE64 character
authorSerhiy Storchaka <storchaka@gmail.com>
Sat, 10 Oct 2015 06:33:11 +0000 (09:33 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sat, 10 Oct 2015 06:33:11 +0000 (09:33 +0300)
was locale depending.

Lib/test/test_codecs.py
Objects/unicodeobject.c

index 2c0058835fa53d25fd39b37657aac5777eef277b..57d5e066263352d66d945773e7a6276593e658e9 100644 (file)
@@ -690,9 +690,9 @@ class UTF7Test(ReadTest):
 
     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 @@ class UTF7Test(ReadTest):
             ('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 @@ class UTF7Test(ReadTest):
     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'),
         ]
index 6c46263222bf178b4840fbdec9606b60ee973548..9368a3a14f594155ceea99b6afa41cd1c5980159 100644 (file)
@@ -1555,7 +1555,10 @@ int unicode_decode_call_errorhandler(const char *errors, PyObject **errorHandler
 /* 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? */