Bug fix for [ 1331062 ] utf 7 codec broken.
Backport candidate.
This commit is contained in:
parent
94832209d1
commit
e115ec832c
@ -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) \
|
#define SPECIAL(c, encodeO, encodeWS) \
|
||||||
(((c)>127 || utf7_special[(c)] == 1) || \
|
((c) > 127 || (c) <= 0 || utf7_special[(c)] == 1 || \
|
||||||
(encodeWS && (utf7_special[(c)] == 2)) || \
|
(encodeWS && (utf7_special[(c)] == 2)) || \
|
||||||
(encodeO && (utf7_special[(c)] == 3)))
|
(encodeO && (utf7_special[(c)] == 3)))
|
||||||
|
|
||||||
#define B64(n) ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(n) & 0x3f])
|
#define B64(n) \
|
||||||
#define B64CHAR(c) (isalnum(c) || (c) == '+' || (c) == '/')
|
("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(n) & 0x3f])
|
||||||
#define UB64(c) ((c) == '+' ? 62 : (c) == '/' ? 63 : (c) >= 'a' ? \
|
#define B64CHAR(c) \
|
||||||
(c) - 71 : (c) >= 'A' ? (c) - 65 : (c) + 4)
|
(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) \
|
#define ENCODE(out, ch, bits) \
|
||||||
while (bits >= 6) { \
|
while (bits >= 6) { \
|
||||||
@ -864,8 +872,8 @@ char utf7_special[128] = {
|
|||||||
Py_UNICODE outCh = (Py_UNICODE) ((ch >> (bits-16)) & 0xffff); \
|
Py_UNICODE outCh = (Py_UNICODE) ((ch >> (bits-16)) & 0xffff); \
|
||||||
bits -= 16; \
|
bits -= 16; \
|
||||||
if (surrogate) { \
|
if (surrogate) { \
|
||||||
/* We have already generated an error for the high 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 */\
|
so let's not bother seeing if the low surrogate is correct or not */ \
|
||||||
surrogate = 0; \
|
surrogate = 0; \
|
||||||
} else if (0xDC00 <= outCh && outCh <= 0xDFFF) { \
|
} else if (0xDC00 <= outCh && outCh <= 0xDFFF) { \
|
||||||
/* This is a surrogate pair. Unfortunately we can't represent \
|
/* This is a surrogate pair. Unfortunately we can't represent \
|
||||||
@ -876,7 +884,7 @@ char utf7_special[128] = {
|
|||||||
} else { \
|
} else { \
|
||||||
*out++ = outCh; \
|
*out++ = outCh; \
|
||||||
} \
|
} \
|
||||||
} \
|
}
|
||||||
|
|
||||||
PyObject *PyUnicode_DecodeUTF7(const char *s,
|
PyObject *PyUnicode_DecodeUTF7(const char *s,
|
||||||
int size,
|
int size,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user