Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 72d421b

Browse files
committed
Boost buffer sizes in the absence of snprintf on Windows.
Ensure that # of args to sprintf always matches # of format specifiers.
1 parent c76e0e5 commit 72d421b

1 file changed

Lines changed: 19 additions & 14 deletions

File tree

Objects/rangeobject.c

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,24 +61,29 @@ range_length(rangeobject *r)
6161
static PyObject *
6262
range_repr(rangeobject *r)
6363
{
64-
char buf1[80];
65-
char buf2[80];
64+
/* buffers must be big enough to hold 3 longs + an int +
65+
* a bit of "(xrange(...) * ...)" text.
66+
*/
67+
char buf1[250];
68+
char buf2[250];
6669

67-
if (r->start == 0 && r->step == 1) {
70+
if (r->start == 0 && r->step == 1)
6871
sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
69-
}
70-
else {
71-
char *fmt = "xrange(%ld, %ld, %ld)";
72-
if (r->step == 1)
73-
fmt = "xrange(%ld, %ld)";
74-
sprintf(buf1, fmt,
72+
73+
else if (r->step == 1)
74+
sprintf(buf1, "xrange(%ld, %ld)",
75+
r->start,
76+
r->start + r->len * r->step);
77+
78+
else
79+
sprintf(buf1, "xrange(%ld, %ld, %ld)",
7580
r->start,
7681
r->start + r->len * r->step,
7782
r->step);
78-
}
79-
if (r->reps != 1) {
83+
84+
if (r->reps != 1)
8085
sprintf(buf2, "(%s * %d)", buf1, r->reps);
81-
}
86+
8287
return PyString_FromString(r->reps == 1 ? buf1 : buf2);
8388
}
8489

@@ -193,10 +198,10 @@ static int
193198
range_contains(rangeobject *r, PyObject *obj)
194199
{
195200
long num = PyInt_AsLong(obj);
196-
201+
197202
if (num < 0 && PyErr_Occurred())
198203
return -1;
199-
204+
200205
if (num < r->start || (num - r->start) % r->step)
201206
return 0;
202207
if (num > (r->start + (r->len * r->step)))

0 commit comments

Comments
 (0)