Skip to content

Commit be8e4d5

Browse files
committed
fix UBSan failures for awaitObject
1 parent 49234c0 commit be8e4d5

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

Modules/_testcapimodule.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2768,6 +2768,7 @@ typedef struct {
27682768
PyObject *ao_iterator;
27692769
} awaitObject;
27702770

2771+
#define awaitObject_CAST(op) ((awaitObject *)(op))
27712772

27722773
static PyObject *
27732774
awaitObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
@@ -2790,21 +2791,23 @@ awaitObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
27902791

27912792

27922793
static void
2793-
awaitObject_dealloc(awaitObject *ao)
2794+
awaitObject_dealloc(PyObject *op)
27942795
{
2796+
awaitObject *ao = awaitObject_CAST(op);
27952797
Py_CLEAR(ao->ao_iterator);
27962798
Py_TYPE(ao)->tp_free(ao);
27972799
}
27982800

27992801

28002802
static PyObject *
2801-
awaitObject_await(awaitObject *ao)
2803+
awaitObject_await(PyObject *op)
28022804
{
2805+
awaitObject *ao = awaitObject_CAST(op);
28032806
return Py_NewRef(ao->ao_iterator);
28042807
}
28052808

28062809
static PyAsyncMethods awaitType_as_async = {
2807-
(unaryfunc)awaitObject_await, /* am_await */
2810+
awaitObject_await, /* am_await */
28082811
0, /* am_aiter */
28092812
0, /* am_anext */
28102813
0, /* am_send */
@@ -2816,7 +2819,7 @@ static PyTypeObject awaitType = {
28162819
"awaitType",
28172820
sizeof(awaitObject), /* tp_basicsize */
28182821
0, /* tp_itemsize */
2819-
(destructor)awaitObject_dealloc, /* destructor tp_dealloc */
2822+
awaitObject_dealloc, /* tp_dealloc */
28202823
0, /* tp_vectorcall_offset */
28212824
0, /* tp_getattr */
28222825
0, /* tp_setattr */

0 commit comments

Comments
 (0)