From d632a13fb8c9e5f47151c70da07bfd78e7c09f28 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Fri, 19 Jun 2020 07:19:07 +0200 Subject: [PATCH 1/1] grp_struct_to_py(): fix error handling Both getgrgid_r() and getgrnam_r() *return* an error number on failures, and don't store it to errno. Thus, rc will not be less than zero, and we need to set errno before we can create a python error from it. Signed-off-by: Johannes Berg Reviewed-by: Rob Browning --- lib/bup/_helpers.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/bup/_helpers.c b/lib/bup/_helpers.c index b39db0a..67c39b5 100644 --- a/lib/bup/_helpers.c +++ b/lib/bup/_helpers.c @@ -1829,11 +1829,10 @@ static PyObject *grp_struct_to_py(const struct group *grp, int rc) } if (rc == 0) return Py_BuildValue("O", Py_None); + errno = rc; if (rc == EIO || rc == EMFILE || rc == ENFILE) return PyErr_SetFromErrno(PyExc_IOError); - if (rc < 0) - return PyErr_SetFromErrno(PyExc_OSError); - assert (0); + return PyErr_SetFromErrno(PyExc_OSError); } static PyObject *bup_getgrgid(PyObject *self, PyObject *args) -- 2.39.2