[Python-checkins] python/dist/src/Objects unicodeobject.c, 2.232, 2.233

lemburg@users.sourceforge.net lemburg at users.sourceforge.net
Thu Oct 20 00:33:35 CEST 2005


Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13762

Modified Files:
	unicodeobject.c 
Log Message:
Bug fix for [ 1331062 ] utf 7 codec broken.

Backport candidate.



Index: unicodeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
retrieving revision 2.232
retrieving revision 2.233
diff -u -d -r2.232 -r2.233
--- unicodeobject.c	6 Oct 2005 20:29:57 -0000	2.232
+++ unicodeobject.c	19 Oct 2005 22:33:31 -0000	2.233
@@ -843,15 +843,23 @@
 
 };
 
+/* 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 @@
         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 @@
 		} else { \
 				*out++ = outCh; \
 		} \
-    } \
+    }
 
 PyObject *PyUnicode_DecodeUTF7(const char *s,
 			       int size,



More information about the Python-checkins mailing list