Skip to content

Commit 6dbc6f5

Browse files
Polishing.
1 parent 102e8dd commit 6dbc6f5

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

Lib/test/test_binascii.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,16 +202,16 @@ def assertNonBase64Data(data, expected, ignorechars):
202202
assertNonBase64Data(b'a\nb==', b'i', ignorechars=bytearray(b'\n'))
203203
assertNonBase64Data(b'a\nb==', b'i', ignorechars=memoryview(b'\n'))
204204

205-
# Same byte in the bit cache: '\r' >> 3 == '\n' >> 3.
205+
# Same cell in the cache: '\r' >> 3 == '\n' >> 3.
206206
data = self.type2test(b'\r\n')
207207
with self.assertRaises(binascii.Error):
208208
binascii.a2b_base64(data, ignorechars=b'\r')
209209
self.assertEqual(binascii.a2b_base64(data, ignorechars=b'\r\n'), b'')
210-
# Same mask in the bit cache: ':' & 7 == '\n' & 7.
211-
data = self.type2test(b':\n')
210+
# Same bit mask in the cache: '*' & 31 == '\n' & 31.
211+
data = self.type2test(b'*\n')
212212
with self.assertRaises(binascii.Error):
213-
binascii.a2b_base64(data, ignorechars=b':')
214-
self.assertEqual(binascii.a2b_base64(data, ignorechars=b':\n'), b'')
213+
binascii.a2b_base64(data, ignorechars=b'*')
214+
self.assertEqual(binascii.a2b_base64(data, ignorechars=b'*\n'), b'')
215215

216216
data = self.type2test(b'a\nb==')
217217
with self.assertRaises(TypeError):

Modules/binascii.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -469,11 +469,13 @@ binascii_b2a_uu_impl(PyObject *module, Py_buffer *data, int backtick)
469469
return PyBytesWriter_FinishWithPointer(writer, ascii_data);
470470
}
471471

472+
typedef unsigned char ignorecache_t[32];
472473

473474
static int
474-
ignorechar(unsigned char c, Py_buffer *ignorechars, char ignorecache[32])
475+
ignorechar(unsigned char c, const Py_buffer *ignorechars,
476+
ignorecache_t ignorecache)
475477
{
476-
if (ignorechars->buf == NULL) {
478+
if (ignorechars == NULL) {
477479
return 0;
478480
}
479481
if (ignorecache[c >> 3] & (1 << (c & 7))) {
@@ -517,8 +519,11 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data, int strict_mode,
517519
if (strict_mode == -1) {
518520
strict_mode = (ignorechars->buf != NULL);
519521
}
520-
char ignorecache[32];
521-
if (strict_mode && ignorechars->buf != NULL) {
522+
if (!strict_mode || ignorechars->buf == NULL || ignorechars->len == 0) {
523+
ignorechars = NULL;
524+
}
525+
ignorecache_t ignorecache;
526+
if (ignorechars != NULL) {
522527
memset(ignorecache, 0, sizeof(ignorecache));
523528
}
524529

0 commit comments

Comments
 (0)