https://github.com/python/cpython/commit/fa7f278583ddf464025c6fffd0441690ab3a87f7
commit: fa7f278583ddf464025c6fffd0441690ab3a87f7
branch: 3.11
author: Miss Islington (bot) <[email protected]>
committer: sobolevn <[email protected]>
date: 2024-03-07T09:10:08Z
summary:

[3.11] gh-116448: Handle errors correctly in `os_waitid_impl` in `posixmodule` 
(GH-116449) (#116453)

gh-116448: Handle errors correctly in `os_waitid_impl` in `posixmodule` 
(GH-116449)
(cherry picked from commit 882fcede83af783a834b759e4643130dc1307ee3)

Co-authored-by: Nikita Sobolev <[email protected]>

files:
M Modules/posixmodule.c

diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 64fcdf2230f6ae..db41e81463ccd4 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -8547,15 +8547,25 @@ os_waitid_impl(PyObject *module, idtype_t idtype, id_t 
id, int options)
     if (!result)
         return NULL;
 
-    PyStructSequence_SET_ITEM(result, 0, PyLong_FromPid(si.si_pid));
-    PyStructSequence_SET_ITEM(result, 1, _PyLong_FromUid(si.si_uid));
-    PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong((long)(si.si_signo)));
-    PyStructSequence_SET_ITEM(result, 3, 
PyLong_FromLong((long)(si.si_status)));
-    PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong((long)(si.si_code)));
-    if (PyErr_Occurred()) {
-        Py_DECREF(result);
-        return NULL;
-    }
+    int pos = 0;
+
+#define SET_RESULT(CALL)                                     \
+    do {                                                     \
+        PyObject *item = (CALL);                             \
+        if (item == NULL) {                                  \
+            Py_DECREF(result);                               \
+            return NULL;                                     \
+        }                                                    \
+        PyStructSequence_SET_ITEM(result, pos++, item);      \
+    } while(0)
+
+    SET_RESULT(PyLong_FromPid(si.si_pid));
+    SET_RESULT(_PyLong_FromUid(si.si_uid));
+    SET_RESULT(PyLong_FromLong((long)(si.si_signo)));
+    SET_RESULT(PyLong_FromLong((long)(si.si_status)));
+    SET_RESULT(PyLong_FromLong((long)(si.si_code)));
+
+#undef SET_RESULT
 
     return result;
 }

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to