summaryrefslogtreecommitdiffstats
path: root/Objects/unicodeobject.c
diff options
context:
space:
mode:
authorMarc-André Lemburg <mal@egenix.com>2005-10-19 22:33:31 (GMT)
committerMarc-André Lemburg <mal@egenix.com>2005-10-19 22:33:31 (GMT)
commite115ec832c8ba6f184a78b0565736298338da61a (patch)
tree15affb3302ae690928d45d7e948c10a2327a5417 /Objects/unicodeobject.c
parent94832209d16bd3d83c4b9c38470177c3d013758a (diff)
downloadcpython-e115ec832c8ba6f184a78b0565736298338da61a.zip
cpython-e115ec832c8ba6f184a78b0565736298338da61a.tar.gz
cpython-e115ec832c8ba6f184a78b0565736298338da61a.tar.bz2
Bug fix for [ 1331062 ] utf 7 codec broken.
Backport candidate.
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r--Objects/unicodeobject.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 7ab4d0c..9a28c56 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -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,