Skip to content

Commit 1ef6bf4

Browse files
authored
gh-111178: fix UBSan failures in Objects/descrobject.c (GH-128245)
fix UBSan failures for `propertyobject`
1 parent 8d15058 commit 1ef6bf4

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

Objects/descrobject.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,6 +1508,8 @@ PyWrapper_New(PyObject *d, PyObject *self)
15081508

15091509
/* A built-in 'property' type */
15101510

1511+
#define _propertyobject_CAST(op) ((propertyobject *)(op))
1512+
15111513
/*
15121514
class property(object):
15131515
@@ -1911,8 +1913,9 @@ property_init_impl(propertyobject *self, PyObject *fget, PyObject *fset,
19111913
}
19121914

19131915
static PyObject *
1914-
property_get__name__(propertyobject *prop, void *Py_UNUSED(ignored))
1916+
property_get__name__(PyObject *op, void *Py_UNUSED(ignored))
19151917
{
1918+
propertyobject *prop = _propertyobject_CAST(op);
19161919
PyObject *name;
19171920
if (property_name(prop, &name) < 0) {
19181921
return NULL;
@@ -1925,16 +1928,17 @@ property_get__name__(propertyobject *prop, void *Py_UNUSED(ignored))
19251928
}
19261929

19271930
static int
1928-
property_set__name__(propertyobject *prop, PyObject *value,
1929-
void *Py_UNUSED(ignored))
1931+
property_set__name__(PyObject *op, PyObject *value, void *Py_UNUSED(ignored))
19301932
{
1933+
propertyobject *prop = _propertyobject_CAST(op);
19311934
Py_XSETREF(prop->prop_name, Py_XNewRef(value));
19321935
return 0;
19331936
}
19341937

19351938
static PyObject *
1936-
property_get___isabstractmethod__(propertyobject *prop, void *closure)
1939+
property_get___isabstractmethod__(PyObject *op, void *closure)
19371940
{
1941+
propertyobject *prop = _propertyobject_CAST(op);
19381942
int res = _PyObject_IsAbstract(prop->prop_get);
19391943
if (res == -1) {
19401944
return NULL;
@@ -1962,9 +1966,8 @@ property_get___isabstractmethod__(propertyobject *prop, void *closure)
19621966
}
19631967

19641968
static PyGetSetDef property_getsetlist[] = {
1965-
{"__name__", (getter)property_get__name__, (setter)property_set__name__},
1966-
{"__isabstractmethod__",
1967-
(getter)property_get___isabstractmethod__, NULL,
1969+
{"__name__", property_get__name__, property_set__name__, NULL, NULL},
1970+
{"__isabstractmethod__", property_get___isabstractmethod__, NULL,
19681971
NULL,
19691972
NULL},
19701973
{NULL} /* Sentinel */

0 commit comments

Comments
 (0)