Patch #1185447: binascii.b2a_qp() now correctly quotes binary characters
with ASCII value less than 32. Also, it correctly quotes dots only if
they occur on a single line, as opposed to the previous behavior of
quoting dots if they are the second character of any line.
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 4dee451..91309f6 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -1160,12 +1160,14 @@
if ((data[in] > 126) ||
(data[in] == '=') ||
(header && data[in] == '_') ||
- ((data[in] == '.') && (linelen == 1)) ||
+ ((data[in] == '.') && (linelen == 0) &&
+ (data[in+1] == '\n' || data[in+1] == '\r' || data[in+1] == 0)) ||
(!istext && ((data[in] == '\r') || (data[in] == '\n'))) ||
((data[in] == '\t' || data[in] == ' ') && (in + 1 == datalen)) ||
((data[in] < 33) &&
(data[in] != '\r') && (data[in] != '\n') &&
- (quotetabs && ((data[in] != '\t') || (data[in] != ' ')))))
+ (quotetabs ||
+ (!quotetabs && ((data[in] != '\t') && (data[in] != ' '))))))
{
if ((linelen + 3) >= MAXLINESIZE) {
linelen = 0;
@@ -1230,12 +1232,14 @@
if ((data[in] > 126) ||
(data[in] == '=') ||
(header && data[in] == '_') ||
- ((data[in] == '.') && (linelen == 1)) ||
+ ((data[in] == '.') && (linelen == 0) &&
+ (data[in+1] == '\n' || data[in+1] == '\r' || data[in+1] == 0)) ||
(!istext && ((data[in] == '\r') || (data[in] == '\n'))) ||
((data[in] == '\t' || data[in] == ' ') && (in + 1 == datalen)) ||
((data[in] < 33) &&
(data[in] != '\r') && (data[in] != '\n') &&
- (quotetabs && ((data[in] != '\t') || (data[in] != ' ')))))
+ (quotetabs ||
+ (!quotetabs && ((data[in] != '\t') && (data[in] != ' '))))))
{
if ((linelen + 3 )>= MAXLINESIZE) {
odata[out++] = '=';