diff options
-rw-r--r-- | Modules/timemodule.c | 85 |
1 files changed, 43 insertions, 42 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c index af0e1a7..c101819 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -452,9 +452,9 @@ time_strftime(PyObject *self, PyObject *args) } else if (!gettmarg(tup, &buf)) return NULL; - /* Checks added to make sure strftime() does not crash Python by - indexing blindly into some array for a textual representation - by some bad index (fixes bug #897625). + /* Checks added to make sure strftime() does not crash Python by + indexing blindly into some array for a textual representation + by some bad index (fixes bug #897625). Also support values of zero from Python code for arguments in which that is out of range by forcing that value to the lowest value that @@ -475,50 +475,50 @@ time_strftime(PyObject *self, PyObject *args) (1) gettmarg() handles bounds-checking. (2) Python's acceptable range is one greater than the range in C, thus need to check against automatic decrement by gettmarg(). - */ + */ if (buf.tm_mon == -1) buf.tm_mon = 0; else if (buf.tm_mon < 0 || buf.tm_mon > 11) { - PyErr_SetString(PyExc_ValueError, "month out of range"); - return NULL; - } + PyErr_SetString(PyExc_ValueError, "month out of range"); + return NULL; + } if (buf.tm_mday == 0) buf.tm_mday = 1; else if (buf.tm_mday < 0 || buf.tm_mday > 31) { - PyErr_SetString(PyExc_ValueError, "day of month out of range"); - return NULL; - } - if (buf.tm_hour < 0 || buf.tm_hour > 23) { - PyErr_SetString(PyExc_ValueError, "hour out of range"); - return NULL; - } - if (buf.tm_min < 0 || buf.tm_min > 59) { - PyErr_SetString(PyExc_ValueError, "minute out of range"); - return NULL; - } - if (buf.tm_sec < 0 || buf.tm_sec > 61) { - PyErr_SetString(PyExc_ValueError, "seconds out of range"); - return NULL; - } - /* tm_wday does not need checking of its upper-bound since taking - ``% 7`` in gettmarg() automatically restricts the range. */ - if (buf.tm_wday < 0) { - PyErr_SetString(PyExc_ValueError, "day of week out of range"); - return NULL; - } + PyErr_SetString(PyExc_ValueError, "day of month out of range"); + return NULL; + } + if (buf.tm_hour < 0 || buf.tm_hour > 23) { + PyErr_SetString(PyExc_ValueError, "hour out of range"); + return NULL; + } + if (buf.tm_min < 0 || buf.tm_min > 59) { + PyErr_SetString(PyExc_ValueError, "minute out of range"); + return NULL; + } + if (buf.tm_sec < 0 || buf.tm_sec > 61) { + PyErr_SetString(PyExc_ValueError, "seconds out of range"); + return NULL; + } + /* tm_wday does not need checking of its upper-bound since taking + ``% 7`` in gettmarg() automatically restricts the range. */ + if (buf.tm_wday < 0) { + PyErr_SetString(PyExc_ValueError, "day of week out of range"); + return NULL; + } if (buf.tm_yday == -1) buf.tm_yday = 0; else if (buf.tm_yday < 0 || buf.tm_yday > 365) { - PyErr_SetString(PyExc_ValueError, "day of year out of range"); - return NULL; - } + PyErr_SetString(PyExc_ValueError, "day of year out of range"); + return NULL; + } /* Normalize tm_isdst just in case someone foolishly implements %Z based on the assumption that tm_isdst falls within the range of [-1, 1] */ - if (buf.tm_isdst < -1) - buf.tm_isdst = -1; + if (buf.tm_isdst < -1) + buf.tm_isdst = -1; else if (buf.tm_isdst > 1) - buf.tm_isdst = 1; + buf.tm_isdst = 1; #ifdef HAVE_WCSFTIME tmpfmt = PyBytes_FromStringAndSize(NULL, @@ -614,14 +614,15 @@ is not present, current time as returned by localtime() is used."); static PyObject * time_strptime(PyObject *self, PyObject *args) { - PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime"); - PyObject *strptime_result; - - if (!strptime_module) - return NULL; - strptime_result = PyObject_CallMethod(strptime_module, "_strptime_time", "O", args); - Py_DECREF(strptime_module); - return strptime_result; + PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime"); + PyObject *strptime_result; + + if (!strptime_module) + return NULL; + strptime_result = PyObject_CallMethod(strptime_module, + "_strptime_time", "O", args); + Py_DECREF(strptime_module); + return strptime_result; } PyDoc_STRVAR(strptime_doc, |