summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-03-13 13:40:38 (GMT)
committerGitHub <noreply@github.com>2024-03-13 13:40:38 (GMT)
commitfc81b6497b0f0025caa3a184164bc983b985609c (patch)
tree102cf28351af1973dd2c384162694c505d6705e9
parent9caad1f99bd2e84ec98924fbe7a9a1ef943f02ac (diff)
downloadcpython-fc81b6497b0f0025caa3a184164bc983b985609c.zip
cpython-fc81b6497b0f0025caa3a184164bc983b985609c.tar.gz
cpython-fc81b6497b0f0025caa3a184164bc983b985609c.tar.bz2
[3.12] gh-116714: Handle errors correctly in `PyFloat_GetInfo` (GH-116715) (#116722)
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>
-rw-r--r--Objects/floatobject.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 83a263c..7a882bf 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -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;
}