]> granicus.if.org Git - python/commitdiff
Fix core dump whenever PyList_Reverse() was called.
authorGuido van Rossum <guido@python.org>
Mon, 12 Feb 2001 22:06:02 +0000 (22:06 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 12 Feb 2001 22:06:02 +0000 (22:06 +0000)
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.

Objects/listobject.c

index f57f6fbed8dcffd79c620cde5df24408f74e2a29..0087c63521e9baca2de73bda6deb66c7d66313fa 100644 (file)
@@ -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;
 }