gh-111178: fix UBSan failures in Modules/_queuemodule.c (GH-129790)

Fix UBSan failures for `simplequeueobject`

Suppress unused return values
This commit is contained in:
Bénédikt Tran 2025-02-21 15:37:32 +01:00 committed by GitHub
parent 4f07fd59cb
commit 55f8bac208
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -197,6 +197,8 @@ typedef struct {
PyObject *weakreflist; PyObject *weakreflist;
} simplequeueobject; } simplequeueobject;
#define simplequeueobject_CAST(op) ((simplequeueobject *)(op))
/*[clinic input] /*[clinic input]
module _queue module _queue
class _queue.SimpleQueue "simplequeueobject *" "simplequeue_get_state_by_type(type)->SimpleQueueType" class _queue.SimpleQueue "simplequeueobject *" "simplequeue_get_state_by_type(type)->SimpleQueueType"
@ -204,28 +206,32 @@ class _queue.SimpleQueue "simplequeueobject *" "simplequeue_get_state_by_type(ty
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=0a4023fe4d198c8d]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=0a4023fe4d198c8d]*/
static int static int
simplequeue_clear(simplequeueobject *self) simplequeue_clear(PyObject *op)
{ {
simplequeueobject *self = simplequeueobject_CAST(op);
RingBuf_Fini(&self->buf); RingBuf_Fini(&self->buf);
return 0; return 0;
} }
static void static void
simplequeue_dealloc(simplequeueobject *self) simplequeue_dealloc(PyObject *op)
{ {
simplequeueobject *self = simplequeueobject_CAST(op);
PyTypeObject *tp = Py_TYPE(self); PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(self); PyObject_GC_UnTrack(self);
(void)simplequeue_clear(self); (void)simplequeue_clear(op);
if (self->weakreflist != NULL) if (self->weakreflist != NULL) {
PyObject_ClearWeakRefs((PyObject *) self); PyObject_ClearWeakRefs(op);
Py_TYPE(self)->tp_free(self); }
tp->tp_free(self);
Py_DECREF(tp); Py_DECREF(tp);
} }
static int static int
simplequeue_traverse(simplequeueobject *self, visitproc visit, void *arg) simplequeue_traverse(PyObject *op, visitproc visit, void *arg)
{ {
simplequeueobject *self = simplequeueobject_CAST(op);
RingBuf *buf = &self->buf; RingBuf *buf = &self->buf;
for (Py_ssize_t i = 0, num_items = buf->num_items; i < num_items; i++) { for (Py_ssize_t i = 0, num_items = buf->num_items; i < num_items; i++) {
Py_VISIT(RingBuf_At(buf, i)); Py_VISIT(RingBuf_At(buf, i));
@ -514,7 +520,7 @@ queue_clear(PyObject *m)
static void static void
queue_free(void *m) queue_free(void *m)
{ {
queue_clear((PyObject *)m); (void)queue_clear((PyObject *)m);
} }
#include "clinic/_queuemodule.c.h" #include "clinic/_queuemodule.c.h"