mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
gh-111178: fix UBSan failures for Modules/_testcapimodule.c
(#131614)
Fix UBSan failures for various classes in `Modules/_testcapimodule.c`, remove some redundant casts and add some `Py_UNUSED()` usages.
This commit is contained in:
parent
491b8141f5
commit
af29d5cfd1
1 changed files with 24 additions and 14 deletions
|
@ -52,6 +52,12 @@ get_testerror(PyObject *self) {
|
||||||
return state->error;
|
return state->error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
simple_object_dealloc(PyObject *self)
|
||||||
|
{
|
||||||
|
PyObject_Free(self);
|
||||||
|
}
|
||||||
|
|
||||||
/* Raise _testcapi.error with test_name + ": " + msg, and return NULL. */
|
/* Raise _testcapi.error with test_name + ": " + msg, and return NULL. */
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -171,7 +177,7 @@ static PyTypeObject _HashInheritanceTester_Type = {
|
||||||
"hashinheritancetester", /* Name of this type */
|
"hashinheritancetester", /* Name of this type */
|
||||||
sizeof(PyObject), /* Basic object size */
|
sizeof(PyObject), /* Basic object size */
|
||||||
0, /* Item size for varobject */
|
0, /* Item size for varobject */
|
||||||
(destructor)PyObject_Free, /* tp_dealloc */
|
simple_object_dealloc, /* tp_dealloc */
|
||||||
0, /* tp_vectorcall_offset */
|
0, /* tp_vectorcall_offset */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
|
@ -1737,7 +1743,7 @@ meth_o(PyObject* self, PyObject* obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
meth_noargs(PyObject* self, PyObject* ignored)
|
meth_noargs(PyObject* self, PyObject *Py_UNUSED(dummy))
|
||||||
{
|
{
|
||||||
return _null_to_none(self);
|
return _null_to_none(self);
|
||||||
}
|
}
|
||||||
|
@ -2552,10 +2558,10 @@ static PyMethodDef TestMethods[] = {
|
||||||
{"pyobject_repr_from_null", pyobject_repr_from_null, METH_NOARGS},
|
{"pyobject_repr_from_null", pyobject_repr_from_null, METH_NOARGS},
|
||||||
{"pyobject_str_from_null", pyobject_str_from_null, METH_NOARGS},
|
{"pyobject_str_from_null", pyobject_str_from_null, METH_NOARGS},
|
||||||
{"pyobject_bytes_from_null", pyobject_bytes_from_null, METH_NOARGS},
|
{"pyobject_bytes_from_null", pyobject_bytes_from_null, METH_NOARGS},
|
||||||
{"test_capsule", (PyCFunction)test_capsule, METH_NOARGS},
|
{"test_capsule", test_capsule, METH_NOARGS},
|
||||||
{"test_from_contiguous", (PyCFunction)test_from_contiguous, METH_NOARGS},
|
{"test_from_contiguous", test_from_contiguous, METH_NOARGS},
|
||||||
#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__GNUC__)
|
#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__GNUC__)
|
||||||
{"test_pep3118_obsolete_write_locks", (PyCFunction)test_pep3118_obsolete_write_locks, METH_NOARGS},
|
{"test_pep3118_obsolete_write_locks", test_pep3118_obsolete_write_locks, METH_NOARGS},
|
||||||
#endif
|
#endif
|
||||||
{"getbuffer_with_null_view", getbuffer_with_null_view, METH_O},
|
{"getbuffer_with_null_view", getbuffer_with_null_view, METH_O},
|
||||||
{"PyBuffer_SizeFromFormat", test_PyBuffer_SizeFromFormat, METH_VARARGS},
|
{"PyBuffer_SizeFromFormat", test_PyBuffer_SizeFromFormat, METH_VARARGS},
|
||||||
|
@ -2768,6 +2774,7 @@ typedef struct {
|
||||||
PyObject *ao_iterator;
|
PyObject *ao_iterator;
|
||||||
} awaitObject;
|
} awaitObject;
|
||||||
|
|
||||||
|
#define awaitObject_CAST(op) ((awaitObject *)(op))
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
awaitObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
awaitObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
|
@ -2790,21 +2797,23 @@ awaitObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
awaitObject_dealloc(awaitObject *ao)
|
awaitObject_dealloc(PyObject *op)
|
||||||
{
|
{
|
||||||
|
awaitObject *ao = awaitObject_CAST(op);
|
||||||
Py_CLEAR(ao->ao_iterator);
|
Py_CLEAR(ao->ao_iterator);
|
||||||
Py_TYPE(ao)->tp_free(ao);
|
Py_TYPE(ao)->tp_free(ao);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
awaitObject_await(awaitObject *ao)
|
awaitObject_await(PyObject *op)
|
||||||
{
|
{
|
||||||
|
awaitObject *ao = awaitObject_CAST(op);
|
||||||
return Py_NewRef(ao->ao_iterator);
|
return Py_NewRef(ao->ao_iterator);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyAsyncMethods awaitType_as_async = {
|
static PyAsyncMethods awaitType_as_async = {
|
||||||
(unaryfunc)awaitObject_await, /* am_await */
|
awaitObject_await, /* am_await */
|
||||||
0, /* am_aiter */
|
0, /* am_aiter */
|
||||||
0, /* am_anext */
|
0, /* am_anext */
|
||||||
0, /* am_send */
|
0, /* am_send */
|
||||||
|
@ -2816,7 +2825,7 @@ static PyTypeObject awaitType = {
|
||||||
"awaitType",
|
"awaitType",
|
||||||
sizeof(awaitObject), /* tp_basicsize */
|
sizeof(awaitObject), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
(destructor)awaitObject_dealloc, /* destructor tp_dealloc */
|
awaitObject_dealloc, /* tp_dealloc */
|
||||||
0, /* tp_vectorcall_offset */
|
0, /* tp_vectorcall_offset */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
|
@ -2871,8 +2880,9 @@ MyList_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MyList_dealloc(MyListObject* op)
|
MyList_dealloc(PyObject *self)
|
||||||
{
|
{
|
||||||
|
MyListObject *op = (MyListObject *)self;
|
||||||
if (op->deallocated) {
|
if (op->deallocated) {
|
||||||
/* We cannot raise exceptions here but we still want the testsuite
|
/* We cannot raise exceptions here but we still want the testsuite
|
||||||
* to fail when we hit this */
|
* to fail when we hit this */
|
||||||
|
@ -2887,7 +2897,7 @@ static PyTypeObject MyList_Type = {
|
||||||
"MyList",
|
"MyList",
|
||||||
sizeof(MyListObject),
|
sizeof(MyListObject),
|
||||||
0,
|
0,
|
||||||
(destructor)MyList_dealloc, /* tp_dealloc */
|
MyList_dealloc, /* tp_dealloc */
|
||||||
0, /* tp_vectorcall_offset */
|
0, /* tp_vectorcall_offset */
|
||||||
0, /* tp_getattr */
|
0, /* tp_getattr */
|
||||||
0, /* tp_setattr */
|
0, /* tp_setattr */
|
||||||
|
@ -2935,11 +2945,11 @@ generic_alias_dealloc(PyObject *op)
|
||||||
{
|
{
|
||||||
PyGenericAliasObject *self = (PyGenericAliasObject*)op;
|
PyGenericAliasObject *self = (PyGenericAliasObject*)op;
|
||||||
Py_CLEAR(self->item);
|
Py_CLEAR(self->item);
|
||||||
Py_TYPE(self)->tp_free((PyObject *)self);
|
Py_TYPE(self)->tp_free(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
generic_alias_mro_entries(PyObject *op, PyObject *bases)
|
generic_alias_mro_entries(PyObject *op, PyObject *Py_UNUSED(bases))
|
||||||
{
|
{
|
||||||
PyGenericAliasObject *self = (PyGenericAliasObject*)op;
|
PyGenericAliasObject *self = (PyGenericAliasObject*)op;
|
||||||
return PyTuple_Pack(1, self->item);
|
return PyTuple_Pack(1, self->item);
|
||||||
|
@ -3090,7 +3100,7 @@ ContainerNoGC_dealloc(PyObject *op)
|
||||||
{
|
{
|
||||||
ContainerNoGCobject *self = (ContainerNoGCobject*)op;
|
ContainerNoGCobject *self = (ContainerNoGCobject*)op;
|
||||||
Py_DECREF(self->value);
|
Py_DECREF(self->value);
|
||||||
Py_TYPE(self)->tp_free((PyObject *)self);
|
Py_TYPE(self)->tp_free(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMemberDef ContainerNoGC_members[] = {
|
static PyMemberDef ContainerNoGC_members[] = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue