Commit 369ac88c authored by Tim Peters's avatar Tim Peters

Boost buffer sizes in the absence of snprintf on Windows.

Ensure that # of args to sprintf always matches # of format specifiers.
parent 4fd35858
...@@ -61,24 +61,29 @@ range_length(rangeobject *r) ...@@ -61,24 +61,29 @@ range_length(rangeobject *r)
static PyObject * static PyObject *
range_repr(rangeobject *r) range_repr(rangeobject *r)
{ {
char buf1[80]; /* buffers must be big enough to hold 3 longs + an int +
char buf2[80]; * a bit of "(xrange(...) * ...)" text.
*/
char buf1[250];
char buf2[250];
if (r->start == 0 && r->step == 1) { if (r->start == 0 && r->step == 1)
sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step); sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
}
else { else if (r->step == 1)
char *fmt = "xrange(%ld, %ld, %ld)"; sprintf(buf1, "xrange(%ld, %ld)",
if (r->step == 1) r->start,
fmt = "xrange(%ld, %ld)"; r->start + r->len * r->step);
sprintf(buf1, fmt,
else
sprintf(buf1, "xrange(%ld, %ld, %ld)",
r->start, r->start,
r->start + r->len * r->step, r->start + r->len * r->step,
r->step); r->step);
}
if (r->reps != 1) { if (r->reps != 1)
sprintf(buf2, "(%s * %d)", buf1, r->reps); sprintf(buf2, "(%s * %d)", buf1, r->reps);
}
return PyString_FromString(r->reps == 1 ? buf1 : buf2); return PyString_FromString(r->reps == 1 ? buf1 : buf2);
} }
...@@ -193,10 +198,10 @@ static int ...@@ -193,10 +198,10 @@ static int
range_contains(rangeobject *r, PyObject *obj) range_contains(rangeobject *r, PyObject *obj)
{ {
long num = PyInt_AsLong(obj); long num = PyInt_AsLong(obj);
if (num < 0 && PyErr_Occurred()) if (num < 0 && PyErr_Occurred())
return -1; return -1;
if (num < r->start || (num - r->start) % r->step) if (num < r->start || (num - r->start) % r->step)
return 0; return 0;
if (num > (r->start + (r->len * r->step))) if (num > (r->start + (r->len * r->step)))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment