[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.
This commit is contained in:
Olly Betts 2022-10-19 16:52:02 +13:00
commit f40658c2d0

View file

@ -240,7 +240,7 @@ typedef struct swig_varlinkobject {
} swig_varlinkobject; } swig_varlinkobject;
SWIGINTERN PyObject * SWIGINTERN PyObject *
swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { swig_varlink_repr(PyObject *SWIGUNUSEDPARM(v)) {
#if PY_VERSION_HEX >= 0x03000000 #if PY_VERSION_HEX >= 0x03000000
return PyUnicode_InternFromString("<Swig global variables>"); return PyUnicode_InternFromString("<Swig global variables>");
#else #else
@ -249,7 +249,8 @@ swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
} }
SWIGINTERN PyObject * SWIGINTERN PyObject *
swig_varlink_str(swig_varlinkobject *v) { swig_varlink_str(PyObject *o) {
swig_varlinkobject *v = (swig_varlinkobject *) o;
#if PY_VERSION_HEX >= 0x03000000 #if PY_VERSION_HEX >= 0x03000000
PyObject *str = PyUnicode_InternFromString("("); PyObject *str = PyUnicode_InternFromString("(");
PyObject *tail; PyObject *tail;
@ -287,7 +288,8 @@ swig_varlink_str(swig_varlinkobject *v) {
} }
SWIGINTERN void SWIGINTERN void
swig_varlink_dealloc(swig_varlinkobject *v) { swig_varlink_dealloc(PyObject *o) {
swig_varlinkobject *v = (swig_varlinkobject *) o;
swig_globalvar *var = v->vars; swig_globalvar *var = v->vars;
while (var) { while (var) {
swig_globalvar *n = var->next; swig_globalvar *n = var->next;
@ -298,7 +300,8 @@ swig_varlink_dealloc(swig_varlinkobject *v) {
} }
SWIGINTERN PyObject * SWIGINTERN PyObject *
swig_varlink_getattr(swig_varlinkobject *v, char *n) { swig_varlink_getattr(PyObject *o, char *n) {
swig_varlinkobject *v = (swig_varlinkobject *) o;
PyObject *res = NULL; PyObject *res = NULL;
swig_globalvar *var = v->vars; swig_globalvar *var = v->vars;
while (var) { while (var) {
@ -315,7 +318,8 @@ swig_varlink_getattr(swig_varlinkobject *v, char *n) {
} }
SWIGINTERN int SWIGINTERN int
swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { swig_varlink_setattr(PyObject *o, char *n, PyObject *p) {
swig_varlinkobject *v = (swig_varlinkobject *) o;
int res = 1; int res = 1;
swig_globalvar *var = v->vars; swig_globalvar *var = v->vars;
while (var) { while (var) {