summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-02-12 22:13:26 +0000
committerTim Peters <tim.peters@gmail.com>2001-02-12 22:13:26 +0000
commit5c4d5bfaf593587032e872c30e32ab129ca15462 (patch)
treefe897df6776a52a36970f2bff5b389e6d58a9c6d /Modules
parentb86c549c7c41d5f8fa6f50ed3e58f3a1d62a1c4e (diff)
downloadcpython-git-5c4d5bfaf593587032e872c30e32ab129ca15462.tar.gz
Related to SF bug 132008 (PyList_Reverse blows up).
_testcapimodule.c make sure PyList_Reverse doesn't blow up again getargs.c assert args isn't NULL at the top of vgetargs1 instead of waiting for a NULL-pointer dereference at the end
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_testcapimodule.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 1b3b596aed..0ffdc17669 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -50,8 +50,54 @@ test_config(PyObject *self, PyObject *args)
return Py_None;
}
+static PyObject*
+test_list_api(PyObject *self, PyObject *args)
+{
+ PyObject* list;
+ int i;
+ if (!PyArg_ParseTuple(args, ":test_list_api"))
+ return NULL;
+
+ /* SF bug 132008: PyList_Reverse segfaults */
+#define NLIST 30
+ list = PyList_New(NLIST);
+ if (list == (PyObject*)NULL)
+ return (PyObject*)NULL;
+ /* list = range(NLIST) */
+ for (i = 0; i < NLIST; ++i) {
+ PyObject* anint = PyInt_FromLong(i);
+ if (anint == (PyObject*)NULL) {
+ Py_DECREF(list);
+ return (PyObject*)NULL;
+ }
+ PyList_SET_ITEM(list, i, anint);
+ }
+ /* list.reverse(), via PyList_Reverse() */
+ i = PyList_Reverse(list); /* should not blow up! */
+ if (i != 0) {
+ Py_DECREF(list);
+ return (PyObject*)NULL;
+ }
+ /* Check that list == range(29, -1, -1) now */
+ for (i = 0; i < NLIST; ++i) {
+ PyObject* anint = PyList_GET_ITEM(list, i);
+ if (PyInt_AS_LONG(anint) != NLIST-1-i) {
+ PyErr_SetString(TestError,
+ "test_list_api: reverse screwed up");
+ Py_DECREF(list);
+ return (PyObject*)NULL;
+ }
+ }
+ Py_DECREF(list);
+#undef NLIST
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
static PyMethodDef TestMethods[] = {
{"test_config", test_config, METH_VARARGS},
+ {"test_list_api", test_list_api, METH_VARARGS},
{NULL, NULL} /* sentinel */
};