https://github.com/python/cpython/commit/55f8bac208540f9950080d89284a34ab4ba3926e
commit: 55f8bac208540f9950080d89284a34ab4ba3926e
branch: main
author: Bénédikt Tran <[email protected]>
committer: encukou <[email protected]>
date: 2025-02-21T14:37:32Z
summary:

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

Fix UBSan failures for `simplequeueobject`

Suppress unused return values

files:
M Modules/_queuemodule.c

diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c
index aee8db802d8c3f..4233ac5736c61e 100644
--- a/Modules/_queuemodule.c
+++ b/Modules/_queuemodule.c
@@ -197,6 +197,8 @@ typedef struct {
     PyObject *weakreflist;
 } simplequeueobject;
 
+#define simplequeueobject_CAST(op)  ((simplequeueobject *)(op))
+
 /*[clinic input]
 module _queue
 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]*/
 
 static int
-simplequeue_clear(simplequeueobject *self)
+simplequeue_clear(PyObject *op)
 {
+    simplequeueobject *self = simplequeueobject_CAST(op);
     RingBuf_Fini(&self->buf);
     return 0;
 }
 
 static void
-simplequeue_dealloc(simplequeueobject *self)
+simplequeue_dealloc(PyObject *op)
 {
+    simplequeueobject *self = simplequeueobject_CAST(op);
     PyTypeObject *tp = Py_TYPE(self);
 
     PyObject_GC_UnTrack(self);
-    (void)simplequeue_clear(self);
-    if (self->weakreflist != NULL)
-        PyObject_ClearWeakRefs((PyObject *) self);
-    Py_TYPE(self)->tp_free(self);
+    (void)simplequeue_clear(op);
+    if (self->weakreflist != NULL) {
+        PyObject_ClearWeakRefs(op);
+    }
+    tp->tp_free(self);
     Py_DECREF(tp);
 }
 
 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;
     for (Py_ssize_t i = 0, num_items = buf->num_items; i < num_items; i++) {
         Py_VISIT(RingBuf_At(buf, i));
@@ -514,7 +520,7 @@ queue_clear(PyObject *m)
 static void
 queue_free(void *m)
 {
-    queue_clear((PyObject *)m);
+    (void)queue_clear((PyObject *)m);
 }
 
 #include "clinic/_queuemodule.c.h"

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to