mirror of
https://github.com/python/cpython.git
synced 2025-07-31 23:23:11 +00:00
gh-111295: Fix error checking in time extension module init (#111296)
Introduce ADD_INT macro wrapper for PyModule_AddIntConstant()
This commit is contained in:
parent
2838c550f7
commit
81b03e7810
2 changed files with 18 additions and 10 deletions
|
@ -0,0 +1 @@
|
|||
Fix :mod:`time` not checking for errors when initializing.
|
|
@ -1740,6 +1740,12 @@ get_gmtoff(time_t t, struct tm *p)
|
|||
static int
|
||||
init_timezone(PyObject *m)
|
||||
{
|
||||
#define ADD_INT(NAME, VALUE) do { \
|
||||
if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) { \
|
||||
return -1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
assert(!PyErr_Occurred());
|
||||
|
||||
/* This code moved from PyInit_time wholesale to allow calling it from
|
||||
|
@ -1763,13 +1769,13 @@ init_timezone(PyObject *m)
|
|||
#if !defined(MS_WINDOWS) || defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM)
|
||||
tzset();
|
||||
#endif
|
||||
PyModule_AddIntConstant(m, "timezone", _Py_timezone);
|
||||
ADD_INT("timezone", _Py_timezone);
|
||||
#ifdef HAVE_ALTZONE
|
||||
PyModule_AddIntConstant(m, "altzone", altzone);
|
||||
ADD_INT("altzone", altzone);
|
||||
#else
|
||||
PyModule_AddIntConstant(m, "altzone", _Py_timezone-3600);
|
||||
ADD_INT("altzone", _Py_timezone-3600);
|
||||
#endif
|
||||
PyModule_AddIntConstant(m, "daylight", _Py_daylight);
|
||||
ADD_INT("daylight", _Py_daylight);
|
||||
#ifdef MS_WINDOWS
|
||||
TIME_ZONE_INFORMATION tzinfo = {0};
|
||||
GetTimeZoneInformation(&tzinfo);
|
||||
|
@ -1828,20 +1834,21 @@ init_timezone(PyObject *m)
|
|||
PyObject *tzname_obj;
|
||||
if (janzone < julyzone) {
|
||||
/* DST is reversed in the southern hemisphere */
|
||||
PyModule_AddIntConstant(m, "timezone", julyzone);
|
||||
PyModule_AddIntConstant(m, "altzone", janzone);
|
||||
PyModule_AddIntConstant(m, "daylight", janzone != julyzone);
|
||||
ADD_INT("timezone", julyzone);
|
||||
ADD_INT("altzone", janzone);
|
||||
ADD_INT("daylight", janzone != julyzone);
|
||||
tzname_obj = Py_BuildValue("(zz)", julyname, janname);
|
||||
} else {
|
||||
PyModule_AddIntConstant(m, "timezone", janzone);
|
||||
PyModule_AddIntConstant(m, "altzone", julyzone);
|
||||
PyModule_AddIntConstant(m, "daylight", janzone != julyzone);
|
||||
ADD_INT("timezone", janzone);
|
||||
ADD_INT("altzone", julyzone);
|
||||
ADD_INT("daylight", janzone != julyzone);
|
||||
tzname_obj = Py_BuildValue("(zz)", janname, julyname);
|
||||
}
|
||||
if (PyModule_Add(m, "tzname", tzname_obj) < 0) {
|
||||
return -1;
|
||||
}
|
||||
#endif // !HAVE_DECL_TZNAME
|
||||
#undef ADD_INT
|
||||
|
||||
if (PyErr_Occurred()) {
|
||||
return -1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue