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.
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.
"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