diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2006-03-20 01:58:39 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2006-03-20 01:58:39 (GMT) |
commit | d5b0c9b87edca68cd31ed61d0c143d9d4160c109 (patch) | |
tree | dff07863a4dc07c8ec6b14f5f92b0878ca0d022f /Modules/datetimemodule.c | |
parent | 29892cc3862cfa5f343dbacb410edadf02fcce9d (diff) | |
download | cpython-d5b0c9b87edca68cd31ed61d0c143d9d4160c109.zip cpython-d5b0c9b87edca68cd31ed61d0c143d9d4160c109.tar.gz cpython-d5b0c9b87edca68cd31ed61d0c143d9d4160c109.tar.bz2 |
Fix problem spotted by Coverity that occurs if tzinfo.tzname().replace()
returns a non-string when converting %Z.
Will backport.
Diffstat (limited to 'Modules/datetimemodule.c')
-rw-r--r-- | Modules/datetimemodule.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c index 199ee65..6823110 100644 --- a/Modules/datetimemodule.c +++ b/Modules/datetimemodule.c @@ -1228,8 +1228,8 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, } } assert(zreplacement != NULL); - ptoappend = PyString_AsString(zreplacement); - ntoappend = PyString_Size(zreplacement); + ptoappend = PyString_AS_STRING(zreplacement); + ntoappend = PyString_GET_SIZE(zreplacement); } else if (ch == 'Z') { /* format tzname */ @@ -1257,14 +1257,18 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, Py_DECREF(temp); if (Zreplacement == NULL) goto Done; + if (!PyString_Check(Zreplacement)) { + PyErr_SetString(PyExc_TypeError, "tzname.replace() did not return a string"); + goto Done; + } } else Py_DECREF(temp); } } assert(Zreplacement != NULL); - ptoappend = PyString_AsString(Zreplacement); - ntoappend = PyString_Size(Zreplacement); + ptoappend = PyString_AS_STRING(Zreplacement); + ntoappend = PyString_GET_SIZE(Zreplacement); } else { /* percent followed by neither z nor Z */ @@ -1275,6 +1279,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, /* Append the ntoappend chars starting at ptoappend to * the new format. */ + assert(ptoappend != NULL); assert(ntoappend >= 0); if (ntoappend == 0) continue; |