Skip to content

Commit

Permalink
gh-111178: fix UBSan failures in Objects/descrobject.c (GH-128245)
Browse files Browse the repository at this point in the history
fix UBSan failures for `propertyobject`
  • Loading branch information
picnixz authored Jan 6, 2025
1 parent 8d15058 commit 1ef6bf4
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions Objects/descrobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -1508,6 +1508,8 @@ PyWrapper_New(PyObject *d, PyObject *self)

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

#define _propertyobject_CAST(op) ((propertyobject *)(op))

/*
class property(object):
Expand Down Expand Up @@ -1911,8 +1913,9 @@ property_init_impl(propertyobject *self, PyObject *fget, PyObject *fset,
}

static PyObject *
property_get__name__(propertyobject *prop, void *Py_UNUSED(ignored))
property_get__name__(PyObject *op, void *Py_UNUSED(ignored))
{
propertyobject *prop = _propertyobject_CAST(op);
PyObject *name;
if (property_name(prop, &name) < 0) {
return NULL;
Expand All @@ -1925,16 +1928,17 @@ property_get__name__(propertyobject *prop, void *Py_UNUSED(ignored))
}

static int
property_set__name__(propertyobject *prop, PyObject *value,
void *Py_UNUSED(ignored))
property_set__name__(PyObject *op, PyObject *value, void *Py_UNUSED(ignored))
{
propertyobject *prop = _propertyobject_CAST(op);
Py_XSETREF(prop->prop_name, Py_XNewRef(value));
return 0;
}

static PyObject *
property_get___isabstractmethod__(propertyobject *prop, void *closure)
property_get___isabstractmethod__(PyObject *op, void *closure)
{
propertyobject *prop = _propertyobject_CAST(op);
int res = _PyObject_IsAbstract(prop->prop_get);
if (res == -1) {
return NULL;
Expand Down Expand Up @@ -1962,9 +1966,8 @@ property_get___isabstractmethod__(propertyobject *prop, void *closure)
}

static PyGetSetDef property_getsetlist[] = {
{"__name__", (getter)property_get__name__, (setter)property_set__name__},
{"__isabstractmethod__",
(getter)property_get___isabstractmethod__, NULL,
{"__name__", property_get__name__, property_set__name__, NULL, NULL},
{"__isabstractmethod__", property_get___isabstractmethod__, NULL,
NULL,
NULL},
{NULL} /* Sentinel */
Expand Down

0 comments on commit 1ef6bf4

Please sign in to comment.