When Line.request() is called without the required 'consumer=value' argument, the module attempts access an empty dictionary object resulting in a segfault. This patch avoids such access when the dictionary is empty and maintains the current design where the LineBulk object is responsible for validation of arguments. Signed-off-by: Joel Savitz <jsavitz@xxxxxxxxxx> --- bindings/python/gpiodmodule.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bindings/python/gpiodmodule.c b/bindings/python/gpiodmodule.c index 2f6ef51..ae7e1cc 100644 --- a/bindings/python/gpiodmodule.c +++ b/bindings/python/gpiodmodule.c @@ -434,8 +434,12 @@ static PyObject *gpiod_Line_request(gpiod_LineObject *self, gpiod_LineBulkObject *bulk_obj; int rv; - def_val = PyDict_GetItemString(kwds, "default_val"); - def_vals = PyDict_GetItemString(kwds, "default_vals"); + if (PyDict_Size(kwds) > 0) { + def_val = PyDict_GetItemString(kwds, "default_val"); + def_vals = PyDict_GetItemString(kwds, "default_vals"); + } else { + def_val = def_vals = NULL; + } if (def_val && def_vals) { PyErr_SetString(PyExc_TypeError, -- 2.23.0