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

Skip to content

Commit 317e774

Browse files
committed
Merged revisions 55180-55183 via svnmerge from
svn+ssh://[email protected]/python/branches/p3yk ........ r55182 | neal.norwitz | 2007-05-07 23:03:06 -0700 (Mon, 07 May 2007) | 1 line Fix refleaks when using range with large values ........
1 parent 617dbc4 commit 317e774

1 file changed

Lines changed: 13 additions & 8 deletions

File tree

Objects/rangeobject.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,7 @@ longrangeiter_len(longrangeiterobject *r, PyObject *no_args)
386386
{
387387
return PyNumber_Subtract(r->len, r->index);
388388
}
389+
389390
static PyObject *rangeiter_new(PyTypeObject *, PyObject *args, PyObject *kw);
390391

391392
PyDoc_STRVAR(length_hint_doc,
@@ -510,9 +511,9 @@ static void
510511
longrangeiter_dealloc(longrangeiterobject *r)
511512
{
512513
Py_XDECREF(r->index);
513-
Py_DECREF(r->start);
514-
Py_DECREF(r->step);
515-
Py_DECREF(r->len);
514+
Py_XDECREF(r->start);
515+
Py_XDECREF(r->step);
516+
Py_XDECREF(r->len);
516517
}
517518

518519
static PyObject *
@@ -601,7 +602,15 @@ range_iter(PyObject *seq)
601602
it = PyObject_New(longrangeiterobject, &Pylongrangeiter_Type);
602603
if (it == NULL)
603604
return NULL;
605+
606+
/* Do all initialization here, so we can DECREF on failure. */
604607
it->start = r->start;
608+
it->step = r->step;
609+
Py_INCREF(it->start);
610+
Py_INCREF(it->step);
611+
612+
it->len = it->index = NULL;
613+
605614
/* Calculate length: (r->stop - r->start) / r->step */
606615
tmp = PyNumber_Subtract(r->stop, r->start);
607616
if (!tmp)
@@ -611,18 +620,14 @@ range_iter(PyObject *seq)
611620
if (!len)
612621
goto create_failure;
613622
it->len = len;
614-
it->step = r->step;
615623
it->index = PyLong_FromLong(0);
616624
if (!it->index)
617625
goto create_failure;
618626

619-
Py_INCREF(it->start);
620-
Py_INCREF(it->step);
621-
Py_INCREF(it->len);
622627
return (PyObject *)it;
623628

624629
create_failure:
625-
PyObject_Del(it);
630+
Py_DECREF(it);
626631
return NULL;
627632
}
628633

0 commit comments

Comments
 (0)