Skip to content

Commit 1278561

Browse files
Fixed converting errors in the binascii module (issue20151).
a2b_qp() now accepts keyword arguments. All "ascii" parameters is renamed to "data" for consistancy with a2b_qp().
1 parent 9d7849f commit 1278561

2 files changed

Lines changed: 62 additions & 62 deletions

File tree

Modules/binascii.c

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,15 @@ ascii_buffer_converter(PyObject *arg, Py_buffer *buf)
241241
/*[clinic input]
242242
binascii.a2b_uu
243243
244-
ascii: ascii_buffer
244+
data: ascii_buffer
245245
/
246246
247247
Decode a line of uuencoded data.
248248
[clinic start generated code]*/
249249

250250
static PyObject *
251-
binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *ascii)
252-
/*[clinic end generated code: checksum=3252d1dbb682979eee03fb2c0c48a4d98a229df4]*/
251+
binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data)
252+
/*[clinic end generated code: checksum=5779f39b0b48459ff0f7a365d7e69b57422e2a4a]*/
253253
{
254254
unsigned char *ascii_data, *bin_data;
255255
int leftbits = 0;
@@ -258,8 +258,8 @@ binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *ascii)
258258
PyObject *rv;
259259
Py_ssize_t ascii_len, bin_len;
260260

261-
ascii_data = ascii->buf;
262-
ascii_len = ascii->len;
261+
ascii_data = data->buf;
262+
ascii_len = data->len;
263263

264264
assert(ascii_len >= 0);
265265

@@ -414,15 +414,15 @@ binascii_find_valid(unsigned char *s, Py_ssize_t slen, int num)
414414
/*[clinic input]
415415
binascii.a2b_base64
416416
417-
ascii: ascii_buffer
417+
data: ascii_buffer
418418
/
419419
420420
Decode a line of base64 data.
421421
[clinic start generated code]*/
422422

423423
static PyObject *
424-
binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *ascii)
425-
/*[clinic end generated code: checksum=73c265f87068c1f3e4bc01834ae6ac5a974143b4]*/
424+
binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data)
425+
/*[clinic end generated code: checksum=3e351b702bed56d249caa4aa0f1bb3fae7546025]*/
426426
{
427427
unsigned char *ascii_data, *bin_data;
428428
int leftbits = 0;
@@ -432,8 +432,8 @@ binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *ascii)
432432
Py_ssize_t ascii_len, bin_len;
433433
int quad_pos = 0;
434434

435-
ascii_data = ascii->buf;
436-
ascii_len = ascii->len;
435+
ascii_data = data->buf;
436+
ascii_len = data->len;
437437

438438
assert(ascii_len >= 0);
439439

@@ -589,15 +589,15 @@ binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data)
589589
/*[clinic input]
590590
binascii.a2b_hqx
591591
592-
ascii: ascii_buffer
592+
data: ascii_buffer
593593
/
594594
595595
Decode .hqx coding.
596596
[clinic start generated code]*/
597597

598598
static PyObject *
599-
binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *ascii)
600-
/*[clinic end generated code: checksum=48075dc4017b66f93086386d5b5848f1e6af260c]*/
599+
binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data)
600+
/*[clinic end generated code: checksum=60bcdbbd28b105cd7091d98e70a6e458f8039e9e]*/
601601
{
602602
unsigned char *ascii_data, *bin_data;
603603
int leftbits = 0;
@@ -607,8 +607,8 @@ binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *ascii)
607607
Py_ssize_t len;
608608
int done = 0;
609609

610-
ascii_data = ascii->buf;
611-
len = ascii->len;
610+
ascii_data = data->buf;
611+
len = data->len;
612612

613613
assert(len >= 0);
614614

@@ -1235,25 +1235,24 @@ static int table_hex[128] = {
12351235
/*[clinic input]
12361236
binascii.a2b_qp
12371237
1238-
ascii: ascii_buffer
1238+
data: ascii_buffer
12391239
header: int(c_default="0") = False
1240-
/
12411240
12421241
Decode a string of qp-encoded data.
12431242
[clinic start generated code]*/
12441243

12451244
static PyObject *
1246-
binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *ascii, int header)
1247-
/*[clinic end generated code: checksum=33910d5b347bf9f33203769e649f35ea41694b71]*/
1245+
binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header)
1246+
/*[clinic end generated code: checksum=a44ef8827035211431d0906a76dbfe97e59a5079]*/
12481247
{
12491248
Py_ssize_t in, out;
12501249
char ch;
1251-
unsigned char *data, *odata;
1250+
unsigned char *ascii_data, *odata;
12521251
Py_ssize_t datalen = 0;
12531252
PyObject *rv;
12541253

1255-
data = ascii->buf;
1256-
datalen = ascii->len;
1254+
ascii_data = data->buf;
1255+
datalen = data->len;
12571256

12581257
/* We allocate the output same size as input, this is overkill.
12591258
* The previous implementation used calloc() so we'll zero out the
@@ -1268,44 +1267,44 @@ binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *ascii, int header)
12681267

12691268
in = out = 0;
12701269
while (in < datalen) {
1271-
if (data[in] == '=') {
1270+
if (ascii_data[in] == '=') {
12721271
in++;
12731272
if (in >= datalen) break;
12741273
/* Soft line breaks */
1275-
if ((data[in] == '\n') || (data[in] == '\r')) {
1276-
if (data[in] != '\n') {
1277-
while (in < datalen && data[in] != '\n') in++;
1274+
if ((ascii_data[in] == '\n') || (ascii_data[in] == '\r')) {
1275+
if (ascii_data[in] != '\n') {
1276+
while (in < datalen && ascii_data[in] != '\n') in++;
12781277
}
12791278
if (in < datalen) in++;
12801279
}
1281-
else if (data[in] == '=') {
1280+
else if (ascii_data[in] == '=') {
12821281
/* broken case from broken python qp */
12831282
odata[out++] = '=';
12841283
in++;
12851284
}
1286-
else if (((data[in] >= 'A' && data[in] <= 'F') ||
1287-
(data[in] >= 'a' && data[in] <= 'f') ||
1288-
(data[in] >= '0' && data[in] <= '9')) &&
1289-
((data[in+1] >= 'A' && data[in+1] <= 'F') ||
1290-
(data[in+1] >= 'a' && data[in+1] <= 'f') ||
1291-
(data[in+1] >= '0' && data[in+1] <= '9'))) {
1285+
else if (((ascii_data[in] >= 'A' && ascii_data[in] <= 'F') ||
1286+
(ascii_data[in] >= 'a' && ascii_data[in] <= 'f') ||
1287+
(ascii_data[in] >= '0' && ascii_data[in] <= '9')) &&
1288+
((ascii_data[in+1] >= 'A' && ascii_data[in+1] <= 'F') ||
1289+
(ascii_data[in+1] >= 'a' && ascii_data[in+1] <= 'f') ||
1290+
(ascii_data[in+1] >= '0' && ascii_data[in+1] <= '9'))) {
12921291
/* hexval */
1293-
ch = hexval(data[in]) << 4;
1292+
ch = hexval(ascii_data[in]) << 4;
12941293
in++;
1295-
ch |= hexval(data[in]);
1294+
ch |= hexval(ascii_data[in]);
12961295
in++;
12971296
odata[out++] = ch;
12981297
}
12991298
else {
13001299
odata[out++] = '=';
13011300
}
13021301
}
1303-
else if (header && data[in] == '_') {
1302+
else if (header && ascii_data[in] == '_') {
13041303
odata[out++] = ' ';
13051304
in++;
13061305
}
13071306
else {
1308-
odata[out] = data[in];
1307+
odata[out] = ascii_data[in];
13091308
in++;
13101309
out++;
13111310
}

Modules/binascii.clinic.c

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,26 @@ preserve
33
[clinic start generated code]*/
44

55
PyDoc_STRVAR(binascii_a2b_uu__doc__,
6-
"a2b_uu(module, ascii)\n"
6+
"a2b_uu(module, data)\n"
77
"Decode a line of uuencoded data.");
88

99
#define BINASCII_A2B_UU_METHODDEF \
1010
{"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_VARARGS, binascii_a2b_uu__doc__},
1111

1212
static PyObject *
13-
binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *ascii);
13+
binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data);
1414

1515
static PyObject *
1616
binascii_a2b_uu(PyModuleDef *module, PyObject *args)
1717
{
1818
PyObject *return_value = NULL;
19-
Py_buffer ascii;
19+
Py_buffer data;
2020

2121
if (!PyArg_ParseTuple(args,
2222
"O&:a2b_uu",
23-
ascii_buffer_converter, &ascii))
23+
ascii_buffer_converter, &data))
2424
goto exit;
25-
return_value = binascii_a2b_uu_impl(module, &ascii);
25+
return_value = binascii_a2b_uu_impl(module, &data);
2626

2727
exit:
2828
return return_value;
@@ -59,26 +59,26 @@ binascii_b2a_uu(PyModuleDef *module, PyObject *args)
5959
}
6060

6161
PyDoc_STRVAR(binascii_a2b_base64__doc__,
62-
"a2b_base64(module, ascii)\n"
62+
"a2b_base64(module, data)\n"
6363
"Decode a line of base64 data.");
6464

6565
#define BINASCII_A2B_BASE64_METHODDEF \
6666
{"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_VARARGS, binascii_a2b_base64__doc__},
6767

6868
static PyObject *
69-
binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *ascii);
69+
binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data);
7070

7171
static PyObject *
7272
binascii_a2b_base64(PyModuleDef *module, PyObject *args)
7373
{
7474
PyObject *return_value = NULL;
75-
Py_buffer ascii;
75+
Py_buffer data;
7676

7777
if (!PyArg_ParseTuple(args,
7878
"O&:a2b_base64",
79-
ascii_buffer_converter, &ascii))
79+
ascii_buffer_converter, &data))
8080
goto exit;
81-
return_value = binascii_a2b_base64_impl(module, &ascii);
81+
return_value = binascii_a2b_base64_impl(module, &data);
8282

8383
exit:
8484
return return_value;
@@ -115,26 +115,26 @@ binascii_b2a_base64(PyModuleDef *module, PyObject *args)
115115
}
116116

117117
PyDoc_STRVAR(binascii_a2b_hqx__doc__,
118-
"a2b_hqx(module, ascii)\n"
118+
"a2b_hqx(module, data)\n"
119119
"Decode .hqx coding.");
120120

121121
#define BINASCII_A2B_HQX_METHODDEF \
122122
{"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_VARARGS, binascii_a2b_hqx__doc__},
123123

124124
static PyObject *
125-
binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *ascii);
125+
binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data);
126126

127127
static PyObject *
128128
binascii_a2b_hqx(PyModuleDef *module, PyObject *args)
129129
{
130130
PyObject *return_value = NULL;
131-
Py_buffer ascii;
131+
Py_buffer data;
132132

133133
if (!PyArg_ParseTuple(args,
134134
"O&:a2b_hqx",
135-
ascii_buffer_converter, &ascii))
135+
ascii_buffer_converter, &data))
136136
goto exit;
137-
return_value = binascii_a2b_hqx_impl(module, &ascii);
137+
return_value = binascii_a2b_hqx_impl(module, &data);
138138

139139
exit:
140140
return return_value;
@@ -363,27 +363,28 @@ binascii_a2b_hex(PyModuleDef *module, PyObject *args)
363363
}
364364

365365
PyDoc_STRVAR(binascii_a2b_qp__doc__,
366-
"a2b_qp(module, ascii, header=False)\n"
366+
"a2b_qp(module, data, header=False)\n"
367367
"Decode a string of qp-encoded data.");
368368

369369
#define BINASCII_A2B_QP_METHODDEF \
370-
{"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS, binascii_a2b_qp__doc__},
370+
{"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__},
371371

372372
static PyObject *
373-
binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *ascii, int header);
373+
binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header);
374374

375375
static PyObject *
376-
binascii_a2b_qp(PyModuleDef *module, PyObject *args)
376+
binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
377377
{
378378
PyObject *return_value = NULL;
379-
Py_buffer ascii;
379+
static char *_keywords[] = {"data", "header", NULL};
380+
Py_buffer data;
380381
int header = 0;
381382

382-
if (!PyArg_ParseTuple(args,
383-
"O&|i:a2b_qp",
384-
ascii_buffer_converter, &ascii, &header))
383+
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
384+
"O&|i:a2b_qp", _keywords,
385+
ascii_buffer_converter, &data, &header))
385386
goto exit;
386-
return_value = binascii_a2b_qp_impl(module, &ascii, header);
387+
return_value = binascii_a2b_qp_impl(module, &data, header);
387388

388389
exit:
389390
return return_value;
@@ -426,4 +427,4 @@ binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
426427

427428
return return_value;
428429
}
429-
/*[clinic end generated code: checksum=bd769a1cd1169bfa0b73a0ee3081b0748fc39e2c]*/
430+
/*[clinic end generated code: checksum=abe48ca8020fa3ec25e13bd9fa7414f6b3ee2946]*/

0 commit comments

Comments
 (0)