Skip to content

Commit f40658c

Browse files
committed
[python] Avoid undefined behaviour
Cast a parameter type explicitly rather than implicitly by casting the function pointer type, as the latter is undefined behaviour. Caught by ubsan.
1 parent a5bc48a commit f40658c

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

Lib/python/pyrun.swg

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ typedef struct swig_varlinkobject {
240240
} swig_varlinkobject;
241241

242242
SWIGINTERN PyObject *
243-
swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
243+
swig_varlink_repr(PyObject *SWIGUNUSEDPARM(v)) {
244244
#if PY_VERSION_HEX >= 0x03000000
245245
return PyUnicode_InternFromString("<Swig global variables>");
246246
#else
@@ -249,7 +249,8 @@ swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
249249
}
250250

251251
SWIGINTERN PyObject *
252-
swig_varlink_str(swig_varlinkobject *v) {
252+
swig_varlink_str(PyObject *o) {
253+
swig_varlinkobject *v = (swig_varlinkobject *) o;
253254
#if PY_VERSION_HEX >= 0x03000000
254255
PyObject *str = PyUnicode_InternFromString("(");
255256
PyObject *tail;
@@ -287,7 +288,8 @@ swig_varlink_str(swig_varlinkobject *v) {
287288
}
288289

289290
SWIGINTERN void
290-
swig_varlink_dealloc(swig_varlinkobject *v) {
291+
swig_varlink_dealloc(PyObject *o) {
292+
swig_varlinkobject *v = (swig_varlinkobject *) o;
291293
swig_globalvar *var = v->vars;
292294
while (var) {
293295
swig_globalvar *n = var->next;
@@ -298,7 +300,8 @@ swig_varlink_dealloc(swig_varlinkobject *v) {
298300
}
299301

300302
SWIGINTERN PyObject *
301-
swig_varlink_getattr(swig_varlinkobject *v, char *n) {
303+
swig_varlink_getattr(PyObject *o, char *n) {
304+
swig_varlinkobject *v = (swig_varlinkobject *) o;
302305
PyObject *res = NULL;
303306
swig_globalvar *var = v->vars;
304307
while (var) {
@@ -315,7 +318,8 @@ swig_varlink_getattr(swig_varlinkobject *v, char *n) {
315318
}
316319

317320
SWIGINTERN int
318-
swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
321+
swig_varlink_setattr(PyObject *o, char *n, PyObject *p) {
322+
swig_varlinkobject *v = (swig_varlinkobject *) o;
319323
int res = 1;
320324
swig_globalvar *var = v->vars;
321325
while (var) {

0 commit comments

Comments
 (0)