Skip to content

Commit 77e8041

Browse files
committed
fix UBSan failures for dbmobject
1 parent cf0b2da commit 77e8041

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

Modules/_dbmmodule.c

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ typedef struct {
6464
DBM *di_dbm;
6565
} dbmobject;
6666

67+
#define _dbmobject_CAST(op) ((dbmobject *)(op))
68+
6769
#include "clinic/_dbmmodule.c.h"
6870

6971
#define check_dbmobject_open(v, err) \
@@ -94,15 +96,16 @@ newdbmobject(_dbm_state *state, const char *file, int flags, int mode)
9496

9597
/* Methods */
9698
static int
97-
dbm_traverse(dbmobject *dp, visitproc visit, void *arg)
99+
dbm_traverse(PyObject *dp, visitproc visit, void *arg)
98100
{
99101
Py_VISIT(Py_TYPE(dp));
100102
return 0;
101103
}
102104

103105
static void
104-
dbm_dealloc(dbmobject *dp)
106+
dbm_dealloc(PyObject *self)
105107
{
108+
dbmobject *dp = _dbmobject_CAST(self);
106109
PyObject_GC_UnTrack(dp);
107110
if (dp->di_dbm) {
108111
dbm_close(dp->di_dbm);
@@ -113,8 +116,9 @@ dbm_dealloc(dbmobject *dp)
113116
}
114117

115118
static Py_ssize_t
116-
dbm_length(dbmobject *dp)
119+
dbm_length(PyObject *self)
117120
{
121+
dbmobject *dp = _dbmobject_CAST(self);
118122
_dbm_state *state = PyType_GetModuleState(Py_TYPE(dp));
119123
assert(state != NULL);
120124
if (dp->di_dbm == NULL) {
@@ -135,8 +139,9 @@ dbm_length(dbmobject *dp)
135139
}
136140

137141
static int
138-
dbm_bool(dbmobject *dp)
142+
dbm_bool(PyObject *self)
139143
{
144+
dbmobject *dp = _dbmobject_CAST(self);
140145
_dbm_state *state = PyType_GetModuleState(Py_TYPE(dp));
141146
assert(state != NULL);
142147

@@ -166,10 +171,11 @@ dbm_bool(dbmobject *dp)
166171
}
167172

168173
static PyObject *
169-
dbm_subscript(dbmobject *dp, PyObject *key)
174+
dbm_subscript(PyObject *self, PyObject *key)
170175
{
171176
datum drec, krec;
172177
Py_ssize_t tmp_size;
178+
dbmobject *dp = _dbmobject_CAST(self);
173179
_dbm_state *state = PyType_GetModuleState(Py_TYPE(dp));
174180
assert(state != NULL);
175181
if (!PyArg_Parse(key, "s#", &krec.dptr, &tmp_size)) {
@@ -192,10 +198,11 @@ dbm_subscript(dbmobject *dp, PyObject *key)
192198
}
193199

194200
static int
195-
dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
201+
dbm_ass_sub(PyObject *self, PyObject *v, PyObject *w)
196202
{
197203
datum krec, drec;
198204
Py_ssize_t tmp_size;
205+
dbmobject *dp = _dbmobject_CAST(self);
199206

200207
if ( !PyArg_Parse(v, "s#", &krec.dptr, &tmp_size) ) {
201208
PyErr_SetString(PyExc_TypeError,
@@ -305,7 +312,7 @@ _dbm_dbm_keys_impl(dbmobject *self, PyTypeObject *cls)
305312
static int
306313
dbm_contains(PyObject *self, PyObject *arg)
307314
{
308-
dbmobject *dp = (dbmobject *)self;
315+
dbmobject *dp = _dbmobject_CAST(self);
309316
datum key, val;
310317
Py_ssize_t size;
311318

@@ -452,15 +459,16 @@ _dbm_dbm_clear_impl(dbmobject *self, PyTypeObject *cls)
452459
}
453460

454461
static PyObject *
455-
dbm__enter__(PyObject *self, PyObject *args)
462+
dbm__enter__(PyObject *self, PyObject *Py_UNUSED(args))
456463
{
457464
return Py_NewRef(self);
458465
}
459466

460467
static PyObject *
461-
dbm__exit__(PyObject *self, PyObject *args)
468+
dbm__exit__(PyObject *self, PyObject *Py_UNUSED(args))
462469
{
463-
return _dbm_dbm_close_impl((dbmobject *)self);
470+
dbmobject *dp = _dbmobject_CAST(self);
471+
return _dbm_dbm_close_impl(dp);
464472
}
465473

466474
static PyMethodDef dbm_methods[] = {

0 commit comments

Comments
 (0)