Skip to content

Commit

Permalink
fix one visible and several possible refleaks in rangeobject.c
Browse files Browse the repository at this point in the history
In some cases, the code was just reordered to allow for less decrefing.
  • Loading branch information
benjaminp committed Nov 16, 2009
1 parent 91799ae commit 36fbb73
Showing 1 changed file with 17 additions and 20 deletions.
37 changes: 17 additions & 20 deletions Objects/rangeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,7 @@ int_range_iter(long start, long stop, long step)
it->step = step;
ulen = get_len_of_range(start, stop, step);
if (ulen > (unsigned long)LONG_MAX) {
Py_DECREF(it);
PyErr_SetString(PyExc_OverflowError,
"range too large to represent as a range_iterator");
return NULL;
Expand Down Expand Up @@ -584,16 +585,14 @@ longrangeiter_next(longrangeiterobject *r)
if (!one)
return NULL;

product = PyNumber_Multiply(r->index, r->step);
if (!product) {
Py_DECREF(one);
return NULL;
}

new_index = PyNumber_Add(r->index, one);
Py_DECREF(one);
if (!new_index) {
Py_DECREF(product);
if (!new_index)
return NULL;

product = PyNumber_Multiply(r->index, r->step);
if (!product) {
Py_DECREF(new_index);
return NULL;
}

Expand All @@ -603,6 +602,9 @@ longrangeiter_next(longrangeiterobject *r)
Py_DECREF(r->index);
r->index = new_index;
}
else {
Py_DECREF(new_index);
}

return result;
}
Expand Down Expand Up @@ -781,6 +783,9 @@ range_reverse(PyObject *seq)
if (!len)
goto create_failure;

/* Steal reference to len. */
it->len = len;

one = PyLong_FromLong(1);
if (!one)
goto create_failure;
Expand All @@ -802,24 +807,16 @@ range_reverse(PyObject *seq)
goto create_failure;

it->step = PyNumber_Negative(range->step);
if (!it->step) {
Py_DECREF(it->start);
if (!it->step)
goto create_failure;
}

/* Steal reference to len. */
it->len = len;

it->index = PyLong_FromLong(0);
if (!it->index) {
Py_DECREF(it);
return NULL;
}
if (!it->index)
goto create_failure;

return (PyObject *)it;

create_failure:
Py_XDECREF(len);
PyObject_Del(it);
Py_DECREF(it);
return NULL;
}

0 comments on commit 36fbb73

Please sign in to comment.