Skip to content

Commit 6268c5e

Browse files
committed
fix UBSan failures for tuplegetterobject
1 parent 7a6384e commit 6268c5e

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

Modules/_collectionsmodule.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2636,6 +2636,8 @@ typedef struct {
26362636
PyObject* doc;
26372637
} _tuplegetterobject;
26382638

2639+
#define _tuplegetterobject_CAST(op) ((_tuplegetterobject *)(op))
2640+
26392641
/*[clinic input]
26402642
@classmethod
26412643
_tuplegetter.__new__ as tuplegetter_new
@@ -2662,7 +2664,7 @@ tuplegetter_new_impl(PyTypeObject *type, Py_ssize_t index, PyObject *doc)
26622664
static PyObject *
26632665
tuplegetter_descr_get(PyObject *self, PyObject *obj, PyObject *type)
26642666
{
2665-
Py_ssize_t index = ((_tuplegetterobject*)self)->index;
2667+
Py_ssize_t index = _tuplegetterobject_CAST(self)->index;
26662668
PyObject *result;
26672669

26682670
if (obj == NULL) {
@@ -2703,7 +2705,7 @@ tuplegetter_descr_set(PyObject *self, PyObject *obj, PyObject *value)
27032705
static int
27042706
tuplegetter_traverse(PyObject *self, visitproc visit, void *arg)
27052707
{
2706-
_tuplegetterobject *tuplegetter = (_tuplegetterobject *)self;
2708+
_tuplegetterobject *tuplegetter = _tuplegetterobject_CAST(self);
27072709
Py_VISIT(Py_TYPE(tuplegetter));
27082710
Py_VISIT(tuplegetter->doc);
27092711
return 0;
@@ -2712,30 +2714,33 @@ tuplegetter_traverse(PyObject *self, visitproc visit, void *arg)
27122714
static int
27132715
tuplegetter_clear(PyObject *self)
27142716
{
2715-
_tuplegetterobject *tuplegetter = (_tuplegetterobject *)self;
2717+
_tuplegetterobject *tuplegetter = _tuplegetterobject_CAST(self);
27162718
Py_CLEAR(tuplegetter->doc);
27172719
return 0;
27182720
}
27192721

27202722
static void
2721-
tuplegetter_dealloc(_tuplegetterobject *self)
2723+
tuplegetter_dealloc(PyObject *self)
27222724
{
27232725
PyTypeObject *tp = Py_TYPE(self);
27242726
PyObject_GC_UnTrack(self);
2725-
tuplegetter_clear((PyObject*)self);
2726-
tp->tp_free((PyObject*)self);
2727+
(void)tuplegetter_clear(self);
2728+
tp->tp_free(self);
27272729
Py_DECREF(tp);
27282730
}
27292731

27302732
static PyObject*
2731-
tuplegetter_reduce(_tuplegetterobject *self, PyObject *Py_UNUSED(ignored))
2733+
tuplegetter_reduce(PyObject *op, PyObject *Py_UNUSED(args))
27322734
{
2733-
return Py_BuildValue("(O(nO))", (PyObject*) Py_TYPE(self), self->index, self->doc);
2735+
_tuplegetterobject *self = _tuplegetterobject_CAST(op);
2736+
return Py_BuildValue("(O(nO))", (PyObject *)Py_TYPE(self),
2737+
self->index, self->doc);
27342738
}
27352739

27362740
static PyObject*
2737-
tuplegetter_repr(_tuplegetterobject *self)
2741+
tuplegetter_repr(PyObject *op)
27382742
{
2743+
_tuplegetterobject *self = _tuplegetterobject_CAST(op);
27392744
return PyUnicode_FromFormat("%s(%zd, %R)",
27402745
_PyType_Name(Py_TYPE(self)),
27412746
self->index, self->doc);
@@ -2748,7 +2753,7 @@ static PyMemberDef tuplegetter_members[] = {
27482753
};
27492754

27502755
static PyMethodDef tuplegetter_methods[] = {
2751-
{"__reduce__", (PyCFunction)tuplegetter_reduce, METH_NOARGS, NULL},
2756+
{"__reduce__", tuplegetter_reduce, METH_NOARGS, NULL},
27522757
{NULL},
27532758
};
27542759

0 commit comments

Comments
 (0)