@@ -61,24 +61,29 @@ range_length(rangeobject *r)
6161static PyObject *
6262range_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
193198range_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