https://github.com/python/cpython/commit/805839021ba7074423811ba07995ae57984a46d3
commit: 805839021ba7074423811ba07995ae57984a46d3
branch: main
author: Bénédikt Tran <[email protected]>
committer: encukou <[email protected]>
date: 2025-02-24T14:06:13+01:00
summary:
gh-111178: fix UBSan failures in `Modules/_winapi.c` (GH-129796)
Fix UBSan failures for `OverlappedObject`
Suppress unused return values
files:
M Modules/_winapi.c
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
index 786a828f00908c..4391bfc09f9cb8 100644
--- a/Modules/_winapi.c
+++ b/Modules/_winapi.c
@@ -144,14 +144,17 @@ typedef struct {
Py_buffer write_buffer;
} OverlappedObject;
+#define OverlappedObject_CAST(op) ((OverlappedObject *)(op))
+
/*
Note: tp_clear (overlapped_clear) is not implemented because it
requires cancelling the IO operation if it's pending and the cancellation is
quite complex and can fail (see: overlapped_dealloc).
*/
static int
-overlapped_traverse(OverlappedObject *self, visitproc visit, void *arg)
+overlapped_traverse(PyObject *op, visitproc visit, void *arg)
{
+ OverlappedObject *self = OverlappedObject_CAST(op);
Py_VISIT(self->read_buffer);
Py_VISIT(self->write_buffer.obj);
Py_VISIT(Py_TYPE(self));
@@ -159,10 +162,11 @@ overlapped_traverse(OverlappedObject *self, visitproc
visit, void *arg)
}
static void
-overlapped_dealloc(OverlappedObject *self)
+overlapped_dealloc(PyObject *op)
{
DWORD bytes;
int err = GetLastError();
+ OverlappedObject *self = OverlappedObject_CAST(op);
PyObject_GC_UnTrack(self);
if (self->pending) {
@@ -3215,7 +3219,7 @@ winapi_clear(PyObject *module)
static void
winapi_free(void *module)
{
- winapi_clear((PyObject *)module);
+ (void)winapi_clear((PyObject *)module);
}
static struct PyModuleDef winapi_module = {
_______________________________________________
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]