mirror of https://github.com/python/cpython.git
[3.11] gh-116714: Handle errors correctly in `PyFloat_GetInfo` (GH-116715) (#116723)
gh-116714: Handle errors correctly in `PyFloat_GetInfo` (GH-116715)
(cherry picked from commit fcd49b4f47
)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
1dcb46104f
commit
bccd1f691f
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue