Protect AVRMEM* and AVRPART* typemaps agains NULL pointers

Some library functions might return AVRMEM* and AVRPART* as
NULL pointers. Prevent them from being dereferenced, and
return a Python None object instead.
This commit is contained in:
Joerg Wunsch
2024-03-07 22:46:13 +01:00
parent 377d3f353c
commit 334b8c5899

View File

@@ -68,29 +68,37 @@ typedef struct avrmem AVRMEM;
// needed there.
%typemap(out) AVRPART* {
PyObject* dict = PyDict_New();
PyDict_SetItem(dict, PyUnicode_FromString("desc"),
PyUnicode_FromString($1->desc));
PyDict_SetItem(dict, PyUnicode_FromString("id"),
PyUnicode_FromString($1->id));
PyDict_SetItem(dict, PyUnicode_FromString("signature"),
PyBytes_FromStringAndSize((const char *)($1->signature), 3));
PyDict_SetItem(dict, PyUnicode_FromString("mem"),
SWIG_NewPointerObj($1->mem, SWIGTYPE_p_avrmem, 0));
$result = dict;
if ($1 == NULL) {
$result = Py_None;
} else {
PyObject* dict = PyDict_New();
PyDict_SetItem(dict, PyUnicode_FromString("desc"),
PyUnicode_FromString($1->desc));
PyDict_SetItem(dict, PyUnicode_FromString("id"),
PyUnicode_FromString($1->id));
PyDict_SetItem(dict, PyUnicode_FromString("signature"),
PyBytes_FromStringAndSize((const char *)($1->signature), 3));
PyDict_SetItem(dict, PyUnicode_FromString("mem"),
SWIG_NewPointerObj($1->mem, SWIGTYPE_p_avrmem, 0));
$result = dict;
}
}
%typemap(out) AVRMEM* {
PyObject* dict = PyDict_New();
PyDict_SetItem(dict, PyUnicode_FromString("desc"),
PyUnicode_FromString($1->desc));
PyDict_SetItem(dict, PyUnicode_FromString("paged"),
PyBool_FromLong($1->paged));
PyDict_SetItem(dict, PyUnicode_FromString("size"),
PyLong_FromLong($1->size));
PyDict_SetItem(dict, PyUnicode_FromString("page_size"),
PyLong_FromLong($1->page_size));
$result = dict;
if ($1 == NULL) {
$result = Py_None;
} else {
PyObject* dict = PyDict_New();
PyDict_SetItem(dict, PyUnicode_FromString("desc"),
PyUnicode_FromString($1->desc));
PyDict_SetItem(dict, PyUnicode_FromString("paged"),
PyBool_FromLong($1->paged));
PyDict_SetItem(dict, PyUnicode_FromString("size"),
PyLong_FromLong($1->size));
PyDict_SetItem(dict, PyUnicode_FromString("page_size"),
PyLong_FromLong($1->page_size));
$result = dict;
}
}
// Config file handling