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:
parent
4f07fd59cb
commit
55f8bac208
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user