mirror of
https://github.com/python/cpython.git
synced 2025-07-29 06:05:00 +00:00
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.
This commit is contained in:
parent
7e2b6bb24f
commit
4aef7275cb
3 changed files with 22 additions and 4 deletions
|
@ -148,6 +148,15 @@ class BinASCIITest(unittest.TestCase):
|
||||||
"0"*75+"=\r\n=FF\r\n=FF\r\n=FF"
|
"0"*75+"=\r\n=FF\r\n=FF\r\n=FF"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.assertEqual(binascii.b2a_qp('\0\n'), '=00\n')
|
||||||
|
self.assertEqual(binascii.b2a_qp('\0\n', quotetabs=True), '=00\n')
|
||||||
|
self.assertEqual(binascii.b2a_qp('foo\tbar\t\n'), 'foo\tbar=09\n')
|
||||||
|
self.assertEqual(binascii.b2a_qp('foo\tbar\t\n', quotetabs=True), 'foo=09bar=09\n')
|
||||||
|
|
||||||
|
self.assertEqual(binascii.b2a_qp('.'), '=2E')
|
||||||
|
self.assertEqual(binascii.b2a_qp('.\n'), '=2E\n')
|
||||||
|
self.assertEqual(binascii.b2a_qp('a.\n'), 'a.\n')
|
||||||
|
|
||||||
def test_empty_string(self):
|
def test_empty_string(self):
|
||||||
# A test for SF bug #1022953. Make sure SystemError is not raised.
|
# A test for SF bug #1022953. Make sure SystemError is not raised.
|
||||||
for n in ['b2a_qp', 'a2b_hex', 'b2a_base64', 'a2b_uu', 'a2b_qp',
|
for n in ['b2a_qp', 'a2b_hex', 'b2a_base64', 'a2b_uu', 'a2b_qp',
|
||||||
|
|
|
@ -525,6 +525,11 @@ Library
|
||||||
Extension Modules
|
Extension Modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
- Bug #1622896: fix a rare corner case where the bz2 module raised an
|
- Bug #1622896: fix a rare corner case where the bz2 module raised an
|
||||||
error in spite of a succesful compression.
|
error in spite of a succesful compression.
|
||||||
|
|
||||||
|
|
|
@ -1160,12 +1160,14 @@ binascii_b2a_qp (PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
if ((data[in] > 126) ||
|
if ((data[in] > 126) ||
|
||||||
(data[in] == '=') ||
|
(data[in] == '=') ||
|
||||||
(header && 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'))) ||
|
(!istext && ((data[in] == '\r') || (data[in] == '\n'))) ||
|
||||||
((data[in] == '\t' || data[in] == ' ') && (in + 1 == datalen)) ||
|
((data[in] == '\t' || data[in] == ' ') && (in + 1 == datalen)) ||
|
||||||
((data[in] < 33) &&
|
((data[in] < 33) &&
|
||||||
(data[in] != '\r') && (data[in] != '\n') &&
|
(data[in] != '\r') && (data[in] != '\n') &&
|
||||||
(quotetabs && ((data[in] != '\t') || (data[in] != ' ')))))
|
(quotetabs ||
|
||||||
|
(!quotetabs && ((data[in] != '\t') && (data[in] != ' '))))))
|
||||||
{
|
{
|
||||||
if ((linelen + 3) >= MAXLINESIZE) {
|
if ((linelen + 3) >= MAXLINESIZE) {
|
||||||
linelen = 0;
|
linelen = 0;
|
||||||
|
@ -1230,12 +1232,14 @@ binascii_b2a_qp (PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
if ((data[in] > 126) ||
|
if ((data[in] > 126) ||
|
||||||
(data[in] == '=') ||
|
(data[in] == '=') ||
|
||||||
(header && 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'))) ||
|
(!istext && ((data[in] == '\r') || (data[in] == '\n'))) ||
|
||||||
((data[in] == '\t' || data[in] == ' ') && (in + 1 == datalen)) ||
|
((data[in] == '\t' || data[in] == ' ') && (in + 1 == datalen)) ||
|
||||||
((data[in] < 33) &&
|
((data[in] < 33) &&
|
||||||
(data[in] != '\r') && (data[in] != '\n') &&
|
(data[in] != '\r') && (data[in] != '\n') &&
|
||||||
(quotetabs && ((data[in] != '\t') || (data[in] != ' ')))))
|
(quotetabs ||
|
||||||
|
(!quotetabs && ((data[in] != '\t') && (data[in] != ' '))))))
|
||||||
{
|
{
|
||||||
if ((linelen + 3 )>= MAXLINESIZE) {
|
if ((linelen + 3 )>= MAXLINESIZE) {
|
||||||
odata[out++] = '=';
|
odata[out++] = '=';
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue