diff options
author | Nikita Sobolev <mail@sobolevn.me> | 2023-10-25 07:19:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-25 07:19:40 (GMT) |
commit | 81b03e78101c97c1d3fe5f90908bbf94e83d7df1 (patch) | |
tree | 379b8d6df768e5b8c859195908270cb0e01ab8a7 /Modules | |
parent | 2838c550f729f3fccedb3d65c6695cb0b78045ab (diff) | |
download | cpython-81b03e78101c97c1d3fe5f90908bbf94e83d7df1.zip cpython-81b03e78101c97c1d3fe5f90908bbf94e83d7df1.tar.gz cpython-81b03e78101c97c1d3fe5f90908bbf94e83d7df1.tar.bz2 |
gh-111295: Fix error checking in time extension module init (#111296)
Introduce ADD_INT macro wrapper for PyModule_AddIntConstant()
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/timemodule.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 6a872a2..bf48c89 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -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; |