summaryrefslogtreecommitdiffstats
path: root/Modules/_testcapimodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_testcapimodule.c')
-rw-r--r--Modules/_testcapimodule.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 7b6da1e..a1d4c92 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -5612,6 +5612,30 @@ pynumber_tobase(PyObject *module, PyObject *args)
static PyObject *test_buildvalue_issue38913(PyObject *, PyObject *);
+
+static PyObject*
+test_set_type_size(PyObject* self, PyObject* ignored)
+{
+ PyObject *obj = PyList_New(0);
+ if (obj == NULL) {
+ return NULL;
+ }
+
+ // Ensure that following tests don't modify the object,
+ // to ensure that Py_DECREF() will not crash.
+ assert(Py_TYPE(obj) == &PyList_Type);
+ assert(Py_SIZE(obj) == 0);
+
+ // bpo-39573: Check that Py_TYPE() and Py_SIZE() can be used
+ // as l-values to set an object type and size.
+ Py_TYPE(obj) = &PyList_Type;
+ Py_SIZE(obj) = 0;
+
+ Py_DECREF(obj);
+ Py_RETURN_NONE;
+}
+
+
static PyMethodDef TestMethods[] = {
{"raise_exception", raise_exception, METH_VARARGS},
{"raise_memoryerror", raise_memoryerror, METH_NOARGS},
@@ -5883,6 +5907,7 @@ static PyMethodDef TestMethods[] = {
{"meth_fastcall_keywords", (PyCFunction)(void(*)(void))meth_fastcall_keywords, METH_FASTCALL|METH_KEYWORDS},
{"pynumber_tobase", pynumber_tobase, METH_VARARGS},
{"without_gc", without_gc, METH_O},
+ {"test_set_type_size", test_set_type_size, METH_NOARGS},
{NULL, NULL} /* sentinel */
};