diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-02-12 22:13:26 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-02-12 22:13:26 (GMT) |
commit | 5c4d5bfaf593587032e872c30e32ab129ca15462 (patch) | |
tree | fe897df6776a52a36970f2bff5b389e6d58a9c6d /Modules/_testcapimodule.c | |
parent | b86c549c7c41d5f8fa6f50ed3e58f3a1d62a1c4e (diff) | |
download | cpython-5c4d5bfaf593587032e872c30e32ab129ca15462.zip cpython-5c4d5bfaf593587032e872c30e32ab129ca15462.tar.gz cpython-5c4d5bfaf593587032e872c30e32ab129ca15462.tar.bz2 |
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/_testcapimodule.c')
-rw-r--r-- | Modules/_testcapimodule.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 1b3b596..0ffdc17 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 */ }; |