gh-116714: Handle errors correctly in PyFloat_GetInfo (#116715)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
Nikita Sobolev 2024-03-13 15:38:03 +03:00 committed by GitHub
parent aa7bcf284f
commit fcd49b4f47
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -98,10 +98,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);
@ -116,11 +124,8 @@ PyFloat_GetInfo(void)
SetIntFlag(FLT_ROUNDS);
#undef SetIntFlag
#undef SetDblFlag
#undef SetFlag
if (PyErr_Occurred()) {
Py_CLEAR(floatinfo);
return NULL;
}
return floatinfo;
}