8000 fix UBSan failures for `MultibyteCodecObject` · python/cpython@efff446 · GitHub
[go: up one dir, main page]

Skip to content

Commit efff446

Browse files
committed
fix UBSan failures for MultibyteCodecObject
1 parent d5a8c23 commit efff446

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

Modules/cjkcodecs/multibytecodec.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,10 @@ call_error_callback(PyObject *errors, PyObject *exc)
136136
}
137137

138138
static PyObject *
139-
codecctx_errors_get(MultibyteStatefulCodecContext *self, void *Py_UNUSED(ignored))
139+
codecctx_errors_get(PyObject *op, void *Py_UNUSED(closure))
140140
{
141141
const char *errors;
142+
MultibyteStatefulCodecContext *self = _MultibyteStatefulCodecContext_CAST(op);
142143

143144
if (self->errors == ERROR_STRICT)
144145
errors = "strict";
@@ -154,11 +155,11 @@ codecctx_errors_get(MultibyteStatefulCodecContext *self, void *Py_UNUSED(ignored
154155
}
155156

156157
static int
157< 10000 span class="diff-text-marker">-
codecctx_errors_set(MultibyteStatefulCodecContext *self, PyObject *value,
158-
void *closure)
158+
codecctx_errors_set(PyObject *op, PyObject *value, void *Py_UNUSED(closure))
159159
{
160160
PyObject *cb;
161161
const char *str;
162+
MultibyteStatefulCodecContext *self = _MultibyteStatefulCodecContext_CAST(op);
162163

163164
if (value == NULL) {
164165
PyErr_SetString(PyExc_AttributeError, "cannot delete attribute");
@@ -184,9 +185,8 @@ codecctx_errors_set(MultibyteStatefulCodecContext *self, PyObject *value,
184185

185186
/* This getset handlers list is used by all the stateful codec objects */
186187
static PyGetSetDef codecctx_getsets[] = {
187-
{"errors", (getter)codecctx_errors_get,
188-
(setter)codecctx_errors_set,
189-
PyDoc_STR("how to treat errors")},
188+
{"errors", codecctx_errors_get, codecctx_errors_set,
189+
PyDoc_STR("how to treat errors")},
190190
{NULL,}
191191
};
192192

@@ -719,22 +719,24 @@ static struct PyMethodDef multibytecodec_methods[] = {
719719
};
720720

721721
static int
722-
multibytecodec_clear(MultibyteCodecObject *self)
722+
multibytecodec_clear(PyObject *op)
723723
{
724+
MultibyteCodecObject *self = _MultibyteCodecObject_CAST(op);
724725
Py_CLEAR(self->cjk_module);
725726
return 0;
726727
}
727728

728729
static int
729-
multibytecodec_traverse(MultibyteCodecObject *self, visitproc visit, void *arg)
730+
multibytecodec_traverse(PyObject *op, visitproc visit, void *arg)
730731
{
732+
MultibyteCodecObject *self = _MultibyteCodecObject_CAST(op);
731733
Py_VISIT(Py_TYPE(self));
732734
Py_VISIT(self->cjk_module);
733735
return 0;
734736
}
735737

736738
static void
737-
multibytecodec_dealloc(MultibyteCodecObject *self)
739+
multibytecodec_dealloc(PyObject *self)
738740
{
739741
PyObject_GC_UnTrack(self);
740742
PyTypeObject *tp = Py_TYPE(self);

0 commit comments

Comments
 (0)
0