diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2024-03-13 13:40:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-13 13:40:38 (GMT) |
commit | fc81b6497b0f0025caa3a184164bc983b985609c (patch) | |
tree | 102cf28351af1973dd2c384162694c505d6705e9 | |
parent | 9caad1f99bd2e84ec98924fbe7a9a1ef943f02ac (diff) | |
download | cpython-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.c | 21 |
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; } |