Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf10b7b2

Browse files
authored
gh-111178: fix UBSan failures inModules/cjkcodecs/multibytecodec.c (gh-129090)
1 parent9abbb58 commitf10b7b2

File tree

1 file changed

+49
-22
lines changed

1 file changed

+49
-22
lines changed

‎Modules/cjkcodecs/multibytecodec.c

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,27 @@ class _multibytecodec.MultibyteStreamWriter "MultibyteStreamWriterObject *" "cli
5656
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=305a76dfdd24b99c]*/
5757
#undef clinic_get_state
5858

59+
#define_MultibyteCodec_CAST(op) ((MultibyteCodec *)(op))
60+
#define_MultibyteCodecObject_CAST(op) ((MultibyteCodecObject *)(op))
61+
62+
#define_MultibyteStatefulCodecContext_CAST(op) \
63+
((MultibyteStatefulCodecContext *)(op))
64+
65+
#define_MultibyteStatefulEncoderContext_CAST(op) \
66+
((MultibyteStatefulEncoderContext *)(op))
67+
#define_MultibyteStatefulDecoderContext_CAST(op) \
68+
((MultibyteStatefulDecoderContext *)(op))
69+
70+
#define_MultibyteIncrementalEncoderObject_CAST(op) \
71+
((MultibyteIncrementalEncoderObject *)(op))
72+
#define_MultibyteIncrementalDecoderObject_CAST(op) \
73+
((MultibyteIncrementalDecoderObject *)(op))
74+
75+
#define_MultibyteStreamReaderObject_CAST(op) \
76+
((MultibyteStreamReaderObject *)(op))
77+
#define_MultibyteStreamWriterObject_CAST(op) \
78+
((MultibyteStreamWriterObject *)(op))
79+
5980
typedefstruct {
6081
PyObject*inobj;
6182
Py_ssize_tinpos,inlen;
@@ -136,9 +157,10 @@ call_error_callback(PyObject *errors, PyObject *exc)
136157
}
137158

138159
staticPyObject*
139-
codecctx_errors_get(MultibyteStatefulCodecContext*self,void*Py_UNUSED(ignored))
160+
codecctx_errors_get(PyObject*op,void*Py_UNUSED(closure))
140161
{
141162
constchar*errors;
163+
MultibyteStatefulCodecContext*self=_MultibyteStatefulCodecContext_CAST(op);
142164

143165
if (self->errors==ERROR_STRICT)
144166
errors="strict";
@@ -154,11 +176,11 @@ codecctx_errors_get(MultibyteStatefulCodecContext *self, void *Py_UNUSED(ignored
154176
}
155177

156178
staticint
157-
codecctx_errors_set(MultibyteStatefulCodecContext*self,PyObject*value,
158-
void*closure)
179+
codecctx_errors_set(PyObject*op,PyObject*value,void*Py_UNUSED(closure))
159180
{
160181
PyObject*cb;
161182
constchar*str;
183+
MultibyteStatefulCodecContext*self=_MultibyteStatefulCodecContext_CAST(op);
162184

163185
if (value==NULL) {
164186
PyErr_SetString(PyExc_AttributeError,"cannot delete attribute");
@@ -184,9 +206,8 @@ codecctx_errors_set(MultibyteStatefulCodecContext *self, PyObject *value,
184206

185207
/* This getset handlers list is used by all the stateful codec objects */
186208
staticPyGetSetDefcodecctx_getsets[]= {
187-
{"errors", (getter)codecctx_errors_get,
188-
(setter)codecctx_errors_set,
189-
PyDoc_STR("how to treat errors")},
209+
{"errors",codecctx_errors_get,codecctx_errors_set,
210+
PyDoc_STR("how to treat errors")},
190211
{NULL,}
191212
};
192213

@@ -719,22 +740,24 @@ static struct PyMethodDef multibytecodec_methods[] = {
719740
};
720741

721742
staticint
722-
multibytecodec_clear(MultibyteCodecObject*self)
743+
multibytecodec_clear(PyObject*op)
723744
{
745+
MultibyteCodecObject*self=_MultibyteCodecObject_CAST(op);
724746
Py_CLEAR(self->cjk_module);
725747
return0;
726748
}
727749

728750
staticint
729-
multibytecodec_traverse(MultibyteCodecObject*self,visitprocvisit,void*arg)
751+
multibytecodec_traverse(PyObject*op,visitprocvisit,void*arg)
730752
{
753+
MultibyteCodecObject*self=_MultibyteCodecObject_CAST(op);
731754
Py_VISIT(Py_TYPE(self));
732755
Py_VISIT(self->cjk_module);
733756
return0;
734757
}
735758

736759
staticvoid
737-
multibytecodec_dealloc(MultibyteCodecObject*self)
760+
multibytecodec_dealloc(PyObject*self)
738761
{
739762
PyObject_GC_UnTrack(self);
740763
PyTypeObject*tp=Py_TYPE(self);
@@ -1106,17 +1129,18 @@ mbiencoder_init(PyObject *self, PyObject *args, PyObject *kwds)
11061129
}
11071130

11081131
staticint
1109-
mbiencoder_traverse(MultibyteIncrementalEncoderObject*self,
1110-
visitprocvisit,void*arg)
1132+
mbiencoder_traverse(PyObject*op,visitprocvisit,void*arg)
11111133
{
1134+
MultibyteIncrementalEncoderObject*self=_MultibyteIncrementalEncoderObject_CAST(op);
11121135
if (ERROR_ISCUSTOM(self->errors))
11131136
Py_VISIT(self->errors);
11141137
return0;
11151138
}
11161139

11171140
staticvoid
1118-
mbiencoder_dealloc(MultibyteIncrementalEncoderObject*self)
1141+
mbiencoder_dealloc(PyObject*op)
11191142
{
1143+
MultibyteIncrementalEncoderObject*self=_MultibyteIncrementalEncoderObject_CAST(op);
11201144
PyTypeObject*tp=Py_TYPE(self);
11211145
PyObject_GC_UnTrack(self);
11221146
ERROR_DECREF(self->errors);
@@ -1388,17 +1412,18 @@ mbidecoder_init(PyObject *self, PyObject *args, PyObject *kwds)
13881412
}
13891413

13901414
staticint
1391-
mbidecoder_traverse(MultibyteIncrementalDecoderObject*self,
1392-
visitprocvisit,void*arg)
1415+
mbidecoder_traverse(PyObject*op,visitprocvisit,void*arg)
13931416
{
1417+
MultibyteIncrementalDecoderObject*self=_MultibyteIncrementalDecoderObject_CAST(op);
13941418
if (ERROR_ISCUSTOM(self->errors))
13951419
Py_VISIT(self->errors);
13961420
return0;
13971421
}
13981422

13991423
staticvoid
1400-
mbidecoder_dealloc(MultibyteIncrementalDecoderObject*self)
1424+
mbidecoder_dealloc(PyObject*op)
14011425
{
1426+
MultibyteIncrementalDecoderObject*self=_MultibyteIncrementalDecoderObject_CAST(op);
14021427
PyTypeObject*tp=Py_TYPE(self);
14031428
PyObject_GC_UnTrack(self);
14041429
ERROR_DECREF(self->errors);
@@ -1704,18 +1729,19 @@ mbstreamreader_init(PyObject *self, PyObject *args, PyObject *kwds)
17041729
}
17051730

17061731
staticint
1707-
mbstreamreader_traverse(MultibyteStreamReaderObject*self,
1708-
visitprocvisit,void*arg)
1732+
mbstreamreader_traverse(PyObject*op,visitprocvisit,void*arg)
17091733
{
1734+
MultibyteStreamReaderObject*self=_MultibyteStreamReaderObject_CAST(op);
17101735
if (ERROR_ISCUSTOM(self->errors))
17111736
Py_VISIT(self->errors);
17121737
Py_VISIT(self->stream);
17131738
return0;
17141739
}
17151740

17161741
staticvoid
1717-
mbstreamreader_dealloc(MultibyteStreamReaderObject*self)
1742+
mbstreamreader_dealloc(PyObject*op)
17181743
{
1744+
MultibyteStreamReaderObject*self=_MultibyteStreamReaderObject_CAST(op);
17191745
PyTypeObject*tp=Py_TYPE(self);
17201746
PyObject_GC_UnTrack(self);
17211747
ERROR_DECREF(self->errors);
@@ -1927,18 +1953,19 @@ mbstreamwriter_init(PyObject *self, PyObject *args, PyObject *kwds)
19271953
}
19281954

19291955
staticint
1930-
mbstreamwriter_traverse(MultibyteStreamWriterObject*self,
1931-
visitprocvisit,void*arg)
1956+
mbstreamwriter_traverse(PyObject*op,visitprocvisit,void*arg)
19321957
{
1958+
MultibyteStreamWriterObject*self=_MultibyteStreamWriterObject_CAST(op);
19331959
if (ERROR_ISCUSTOM(self->errors))
19341960
Py_VISIT(self->errors);
19351961
Py_VISIT(self->stream);
19361962
return0;
19371963
}
19381964

19391965
staticvoid
1940-
mbstreamwriter_dealloc(MultibyteStreamWriterObject*self)
1966+
mbstreamwriter_dealloc(PyObject*op)
19411967
{
1968+
MultibyteStreamWriterObject*self=_MultibyteStreamWriterObject_CAST(op);
19421969
PyTypeObject*tp=Py_TYPE(self);
19431970
PyObject_GC_UnTrack(self);
19441971
ERROR_DECREF(self->errors);
@@ -2044,7 +2071,7 @@ _multibytecodec_clear(PyObject *mod)
20442071
staticvoid
20452072
_multibytecodec_free(void*mod)
20462073
{
2047-
_multibytecodec_clear((PyObject*)mod);
2074+
(void)_multibytecodec_clear((PyObject*)mod);
20482075
}
20492076

20502077
#defineCREATE_TYPE(module,type,spec) \

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp