gh-87347: Fix PyObject_NEW() regression (#94234)

Don't add parenthesis around the type parameter.

Add unit tests on PyObject_NEW() and similar functions.
This commit is contained in:
Victor Stinner 2022-06-26 12:40:17 +02:00 committed by GitHub
parent 17ed560fcd
commit 44c8e68b8c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 2 deletions

View file

@ -4188,6 +4188,48 @@ test_pymem_alloc0(PyObject *self, PyObject *Py_UNUSED(ignored))
Py_RETURN_NONE;
}
static PyObject *
test_pymem_new(PyObject *self, PyObject *Py_UNUSED(ignored))
{
char *ptr;
PyTypeObject *type = &PyBaseObject_Type;
PyTypeObject *var_type = &PyLong_Type;
// PyObject_New()
ptr = PyObject_New(char, type);
if (ptr == NULL) {
goto alloc_failed;
}
PyObject_Free(ptr);
// PyObject_NEW()
ptr = PyObject_NEW(char, type);
if (ptr == NULL) {
goto alloc_failed;
}
PyObject_Free(ptr);
// PyObject_NewVar()
ptr = PyObject_NewVar(char, var_type, 3);
if (ptr == NULL) {
goto alloc_failed;
}
PyObject_Free(ptr);
// PyObject_NEW_VAR()
ptr = PyObject_NEW_VAR(char, var_type, 3);
if (ptr == NULL) {
goto alloc_failed;
}
PyObject_Free(ptr);
Py_RETURN_NONE;
alloc_failed:
PyErr_NoMemory();
return NULL;
}
typedef struct {
PyMemAllocatorEx alloc;
@ -6284,6 +6326,7 @@ static PyMethodDef TestMethods[] = {
{"with_tp_del", with_tp_del, METH_VARARGS},
{"create_cfunction", create_cfunction, METH_NOARGS},
{"test_pymem_alloc0", test_pymem_alloc0, METH_NOARGS},
{"test_pymem_new", test_pymem_new, METH_NOARGS},
{"test_pymem_setrawallocators",test_pymem_setrawallocators, METH_NOARGS},
{"test_pymem_setallocators",test_pymem_setallocators, METH_NOARGS},
{"test_pyobject_setallocators",test_pyobject_setallocators, METH_NOARGS},