diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-12-16 12:29:37 +0100 |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-12-16 12:29:37 +0100 |
commit | b0d3a6b35e22df2aeaaa210f10078a42e0063f60 (patch) | |
tree | b0e455c34accbfa95ddab7883640488fd3668db8 /Modules/timemodule.c | |
parent | 6e84b342987329083f45dfc6c50a0b3b88ef67d9 (diff) | |
parent | 732f2346b552418351e9c1f9ac60f78e4b6282a8 (diff) | |
download | cpython-b0d3a6b35e22df2aeaaa210f10078a42e0063f60.tar.gz |
Issue #10350: Read and save errno before calling a function which might overwrite it.
Original patch by Hallvard B Furuseth.
Diffstat (limited to 'Modules/timemodule.c')
-rw-r--r-- | Modules/timemodule.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c index dff46413e4..001b311731 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -515,12 +515,14 @@ time_strftime(PyObject *self, PyObject *args) * will be ahead of time... */ for (i = 1024; ; i += i) { + int err; outbuf = (time_char *)PyMem_Malloc(i*sizeof(time_char)); if (outbuf == NULL) { PyErr_NoMemory(); break; } buflen = format_time(outbuf, i, fmt, &buf); + err = errno; if (buflen > 0 || i >= 256 * fmtlen) { /* If the buffer is 256 times as long as the format, it's probably not failing for lack of room! @@ -538,7 +540,7 @@ time_strftime(PyObject *self, PyObject *args) PyMem_Free(outbuf); #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) /* VisualStudio .NET 2005 does this properly */ - if (buflen == 0 && errno == EINVAL) { + if (buflen == 0 && err == EINVAL) { PyErr_SetString(PyExc_ValueError, "Invalid format string"); break; } |