Not sure really what the effect of this is (if any) opening bug here for a queued up master fix that (may) need to be backported. lib/ldb/pyldb.c has static PyObject *py_ldb_control_set_critical(PyLdbControlObject *self, PyObject *value, void *closure) this function should match 'setter' func signature .name = discard_const_p(char, "critical"), .get = (getter)py_ldb_control_get_critical, .set = (setter)py_ldb_control_set_critical, <<<====== so return type is incorrect. from https://docs.python.org/3/c-api/structures.html "set functions take two PyObject* parameters (the instance and the value to be set) and a function pointer (the associated closure): typedef int (*setter)(PyObject *, PyObject *, void *); In case the attribute should be deleted the second parameter is NULL. Should return 0 on success or -1 with a set exception on failure." so although we don't ever return -1 we also never return 0.
(In reply to Noel Power from comment #0) >so although we don't ever return -1 we also never return 0. erm, well we have an invalid signature and we always return 0 (e.g. NULL) which will always be zero. So never a problem I guess