mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Fix core dump whenever PyList_Reverse() was called.
This fixes SF bug #132008, reported by Warren J. Hack. The copyright for this patch (and this patch only) belongs to CNRI, as part of the (yet to be issued) 1.6.1 release. This is now checked into the HEAD branch. Tim will check in a test case to check for this specific bug, and an assertion in PyArgs_ParseTuple() to catch similar bugs in the future.
This commit is contained in:
parent
5bba231d1e
commit
b86c549c7c
1 changed files with 14 additions and 11 deletions
|
@ -1268,24 +1268,30 @@ PyList_Sort(PyObject *v)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
listreverse(PyListObject *self, PyObject *args)
|
||||
static void
|
||||
_listreverse(PyListObject *self)
|
||||
{
|
||||
register PyObject **p, **q;
|
||||
register PyObject *tmp;
|
||||
|
||||
if (!PyArg_ParseTuple(args, ":reverse"))
|
||||
return NULL;
|
||||
|
||||
if (self->ob_size > 1) {
|
||||
for (p = self->ob_item, q = self->ob_item + self->ob_size - 1;
|
||||
p < q; p++, q--) {
|
||||
p < q;
|
||||
p++, q--)
|
||||
{
|
||||
tmp = *p;
|
||||
*p = *q;
|
||||
*q = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
listreverse(PyListObject *self, PyObject *args)
|
||||
{
|
||||
if (!PyArg_ParseTuple(args, ":reverse"))
|
||||
return NULL;
|
||||
_listreverse(self);
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
@ -1297,10 +1303,7 @@ PyList_Reverse(PyObject *v)
|
|||
PyErr_BadInternalCall();
|
||||
return -1;
|
||||
}
|
||||
v = listreverse((PyListObject *)v, (PyObject *)NULL);
|
||||
if (v == NULL)
|
||||
return -1;
|
||||
Py_DECREF(v);
|
||||
_listreverse((PyListObject *)v);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue