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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SetIntFlag(flag) \
|
#define SetFlag(CALL) \
|
||||||
PyStructSequence_SET_ITEM(floatinfo, pos++, PyLong_FromLong(flag))
|
do { \
|
||||||
#define SetDblFlag(flag) \
|
PyObject *flag = (CALL); \
|
||||||
PyStructSequence_SET_ITEM(floatinfo, pos++, PyFloat_FromDouble(flag))
|
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);
|
SetDblFlag(DBL_MAX);
|
||||||
SetIntFlag(DBL_MAX_EXP);
|
SetIntFlag(DBL_MAX_EXP);
|
||||||
|
@ -119,11 +127,8 @@ PyFloat_GetInfo(void)
|
||||||
SetIntFlag(FLT_ROUNDS);
|
SetIntFlag(FLT_ROUNDS);
|
||||||
#undef SetIntFlag
|
#undef SetIntFlag
|
||||||
#undef SetDblFlag
|
#undef SetDblFlag
|
||||||
|
#undef SetFlag
|
||||||
|
|
||||||
if (PyErr_Occurred()) {
|
|
||||||
Py_CLEAR(floatinfo);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return floatinfo;
|
return floatinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue