]> granicus.if.org Git - python/commitdiff
Bug fix for [ 1331062 ] utf 7 codec broken.
authorMarc-André Lemburg <mal@egenix.com>
Wed, 19 Oct 2005 22:33:31 +0000 (22:33 +0000)
committerMarc-André Lemburg <mal@egenix.com>
Wed, 19 Oct 2005 22:33:31 +0000 (22:33 +0000)
Backport candidate.

Objects/unicodeobject.c

index 7ab4d0c47b3f47e3fbad92faad9da4d2ebeae5ea..9a28c56f2f12a824682f5920d330a7b5f28da91b 100644 (file)
@@ -843,15 +843,23 @@ char utf7_special[128] = {
 
 };
 
+/* Note: The comparison (c) <= 0 is a trick to work-around gcc
+   warnings about the comparison always being false; since
+   utf7_special[0] is 1, we can safely make that one comparison
+   true  */
+
 #define SPECIAL(c, encodeO, encodeWS) \
-       (((c)>127 || utf7_special[(c)] == 1) || \
+    ((c) > 127 || (c) <= 0 || utf7_special[(c)] == 1 || \
         (encodeWS && (utf7_special[(c)] == 2)) || \
      (encodeO && (utf7_special[(c)] == 3)))
 
-#define B64(n)  ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(n) & 0x3f])
-#define B64CHAR(c) (isalnum(c) || (c) == '+' || (c) == '/')
-#define UB64(c)        ((c) == '+' ? 62 : (c) == '/' ? 63 : (c) >= 'a' ? \
-                        (c) - 71 : (c) >= 'A' ? (c) - 65 : (c) + 4)
+#define B64(n)  \
+    ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(n) & 0x3f])
+#define B64CHAR(c) \
+    (isalnum(c) || (c) == '+' || (c) == '/')
+#define UB64(c) \
+    ((c) == '+' ? 62 : (c) == '/' ? 63 : (c) >= 'a' ?                   \
+     (c) - 71 : (c) >= 'A' ? (c) - 65 : (c) + 4 )
 
 #define ENCODE(out, ch, bits) \
     while (bits >= 6) { \
@@ -864,8 +872,8 @@ char utf7_special[128] = {
         Py_UNICODE outCh = (Py_UNICODE) ((ch >> (bits-16)) & 0xffff); \
         bits -= 16; \
                if (surrogate) { \
-                       /* We have already generated an error for the high surrogate
-               so let's not bother seeing if the low surrogate is correct or not */\
+            /* We have already generated an error for the high surrogate \
+               so let's not bother seeing if the low surrogate is correct or not */ \
                        surrogate = 0; \
                } else if (0xDC00 <= outCh && outCh <= 0xDFFF) { \
             /* This is a surrogate pair. Unfortunately we can't represent \
@@ -876,7 +884,7 @@ char utf7_special[128] = {
                } else { \
                                *out++ = outCh; \
                } \
-    } \
+    }
 
 PyObject *PyUnicode_DecodeUTF7(const char *s,
                               int size,