]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-116714: Handle errors correctly in `PyFloat_GetInfo` (GH-116715) (#116722)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 13 Mar 2024 13:40:38 +0000 (14:40 +0100)
committerGitHub <noreply@github.com>
Wed, 13 Mar 2024 13:40:38 +0000 (16:40 +0300)
gh-116714: Handle errors correctly in `PyFloat_GetInfo` (GH-116715)
(cherry picked from commit fcd49b4f47f1edd9a2717f6619da7e7af8ea73cf)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Objects/floatobject.c

index 83a263c0d9c67e197cc797bcd53c29e0c8f4d2f3..7a882bfd88bdae960426b33267ca5972a6cce900 100644 (file)
@@ -101,10 +101,18 @@ PyFloat_GetInfo(void)
         return NULL;
     }
 
-#define SetIntFlag(flag) \
-    PyStructSequence_SET_ITEM(floatinfo, pos++, PyLong_FromLong(flag))
-#define SetDblFlag(flag) \
-    PyStructSequence_SET_ITEM(floatinfo, pos++, PyFloat_FromDouble(flag))
+#define SetFlag(CALL) \
+    do {                                                    \
+        PyObject *flag = (CALL);                            \
+        if (flag == NULL) {                                 \
+            Py_CLEAR(floatinfo);                            \
+            return NULL;                                    \
+        }                                                   \
+        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
+    } while (0)
+
+#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
+#define SetDblFlag(FLAG) SetFlag(PyFloat_FromDouble((FLAG)))
 
     SetDblFlag(DBL_MAX);
     SetIntFlag(DBL_MAX_EXP);
@@ -119,11 +127,8 @@ PyFloat_GetInfo(void)
     SetIntFlag(FLT_ROUNDS);
 #undef SetIntFlag
 #undef SetDblFlag
+#undef SetFlag
 
-    if (PyErr_Occurred()) {
-        Py_CLEAR(floatinfo);
-        return NULL;
-    }
     return floatinfo;
 }