Skip to content

Commit 55f8bac

Browse files
authored
gh-111178: fix UBSan failures in Modules/_queuemodule.c (GH-129790)
Fix UBSan failures for `simplequeueobject` Suppress unused return values
1 parent 4f07fd5 commit 55f8bac

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

Modules/_queuemodule.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,35 +197,41 @@ typedef struct {
197197
PyObject *weakreflist;
198198
} simplequeueobject;
199199

200+
#define simplequeueobject_CAST(op) ((simplequeueobject *)(op))
201+
200202
/*[clinic input]
201203
module _queue
202204
class _queue.SimpleQueue "simplequeueobject *" "simplequeue_get_state_by_type(type)->SimpleQueueType"
203205
[clinic start generated code]*/
204206
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=0a4023fe4d198c8d]*/
205207

206208
static int
207-
simplequeue_clear(simplequeueobject *self)
209+
simplequeue_clear(PyObject *op)
208210
{
211+
simplequeueobject *self = simplequeueobject_CAST(op);
209212
RingBuf_Fini(&self->buf);
210213
return 0;
211214
}
212215

213216
static void
214-
simplequeue_dealloc(simplequeueobject *self)
217+
simplequeue_dealloc(PyObject *op)
215218
{
219+
simplequeueobject *self = simplequeueobject_CAST(op);
216220
PyTypeObject *tp = Py_TYPE(self);
217221

218222
PyObject_GC_UnTrack(self);
219-
(void)simplequeue_clear(self);
220-
if (self->weakreflist != NULL)
221-
PyObject_ClearWeakRefs((PyObject *) self);
222-
Py_TYPE(self)->tp_free(self);
223+
(void)simplequeue_clear(op);
224+
if (self->weakreflist != NULL) {
225+
PyObject_ClearWeakRefs(op);
226+
}
227+
tp->tp_free(self);
223228
Py_DECREF(tp);
224229
}
225230

226231
static int
227-
simplequeue_traverse(simplequeueobject *self, visitproc visit, void *arg)
232+
simplequeue_traverse(PyObject *op, visitproc visit, void *arg)
228233
{
234+
simplequeueobject *self = simplequeueobject_CAST(op);
229235
RingBuf *buf = &self->buf;
230236
for (Py_ssize_t i = 0, num_items = buf->num_items; i < num_items; i++) {
231237
Py_VISIT(RingBuf_At(buf, i));
@@ -514,7 +520,7 @@ queue_clear(PyObject *m)
514520
static void
515521
queue_free(void *m)
516522
{
517-
queue_clear((PyObject *)m);
523+
(void)queue_clear((PyObject *)m);
518524
}
519525

520526
#include "clinic/_queuemodule.c.h"

0 commit comments

Comments
 (0)