re-merge r69268 (issue4804) from trunk:

Now that the C runtime assertions are not silenced any more,
we must provide checks for the format string of strftime
This commit is contained in:
Amaury Forgeot d'Arc 2009-03-02 23:52:57 +00:00
parent f5b52246ed
commit b5be6d4819
1 changed files with 18 additions and 0 deletions

View File

@ -513,6 +513,24 @@ time_strftime(PyObject *self, PyObject *args)
if (format == NULL)
return NULL;
fmt = PyBytes_AS_STRING(format);
#ifdef MS_WINDOWS
/* check that the format string contains only valid directives */
for(outbuf = strchr(fmt, '%');
outbuf != NULL;
outbuf = strchr(outbuf+2, '%'))
{
if (outbuf[1]=='#')
++outbuf; /* not documented by python, */
if (outbuf[1]=='\0' ||
!strchr("aAbBcdfHIjmMpSUwWxXyYzZ%", outbuf[1]))
{
PyErr_SetString(PyExc_ValueError, "Invalid format string");
return 0;
}
}
#endif
fmtlen = strlen(fmt);
/* I hate these functions that presume you know how big the output