mirror of
https://github.com/python/cpython.git
synced 2024-11-24 10:24:35 +08:00
Issue #5249: time.strftime returned malformed string when format string
contained non ascii character on windows.
This commit is contained in:
parent
debb98d91f
commit
575d133065
@ -12,6 +12,9 @@ What's New in Python 3.1 alpha 0
|
||||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #5249: time.strftime returned malformed string when format string
|
||||
contained non ascii character on windows.
|
||||
|
||||
- Issue #5186: Reduce hash collisions for objects with no __hash__ method by
|
||||
rotating the object pointer by 4 bits to the right.
|
||||
|
||||
|
@ -508,9 +508,11 @@ time_strftime(PyObject *self, PyObject *args)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Convert the unicode string to an ascii one */
|
||||
fmt = _PyUnicode_AsString(format);
|
||||
|
||||
/* Convert the unicode string to an ascii one */
|
||||
format = PyUnicode_AsEncodedString(format, TZNAME_ENCODING, NULL);
|
||||
if (format == NULL)
|
||||
return NULL;
|
||||
fmt = PyBytes_AS_STRING(format);
|
||||
fmtlen = strlen(fmt);
|
||||
|
||||
/* I hate these functions that presume you know how big the output
|
||||
@ -519,6 +521,7 @@ time_strftime(PyObject *self, PyObject *args)
|
||||
for (i = 1024; ; i += i) {
|
||||
outbuf = (char *)PyMem_Malloc(i);
|
||||
if (outbuf == NULL) {
|
||||
Py_DECREF(format);
|
||||
return PyErr_NoMemory();
|
||||
}
|
||||
buflen = strftime(outbuf, i, fmt, &buf);
|
||||
@ -532,6 +535,7 @@ time_strftime(PyObject *self, PyObject *args)
|
||||
ret = PyUnicode_Decode(outbuf, buflen,
|
||||
TZNAME_ENCODING, NULL);
|
||||
PyMem_Free(outbuf);
|
||||
Py_DECREF(format);
|
||||
return ret;
|
||||
}
|
||||
PyMem_Free(outbuf);
|
||||
@ -539,6 +543,7 @@ time_strftime(PyObject *self, PyObject *args)
|
||||
/* VisualStudio .NET 2005 does this properly */
|
||||
if (buflen == 0 && errno == EINVAL) {
|
||||
PyErr_SetString(PyExc_ValueError, "Invalid format string");
|
||||
Py_DECREF(format);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user