diff options
author | Marc-André Lemburg <mal@egenix.com> | 2005-10-19 22:33:31 (GMT) |
---|---|---|
committer | Marc-André Lemburg <mal@egenix.com> | 2005-10-19 22:33:31 (GMT) |
commit | e115ec832c8ba6f184a78b0565736298338da61a (patch) | |
tree | 15affb3302ae690928d45d7e948c10a2327a5417 /Objects/unicodeobject.c | |
parent | 94832209d16bd3d83c4b9c38470177c3d013758a (diff) | |
download | cpython-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.c | 24 |
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, |