Mercurial > cpython-lru_cache-weakref
diff Python/sysmodule.c @ 21127:dd28a4ecb37f legacy-trunk
mywrite(): The test for trouble in PyOS_vsnprintf was wrong on both
ends. Also, when there is trouble, ensure the buffer has a traiing
0 byte.
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Sun, 02 Dec 2001 08:29:16 +0000 |
| parents | 47f6533674fd |
| children | 87fa6e9bd77e |
line wrap: on
line diff
--- a/Python/sysmodule.c Sat Dec 01 16:00:10 2001 +0000 +++ b/Python/sysmodule.c Sun Dec 02 08:29:16 2001 +0000 @@ -1023,13 +1023,20 @@ vfprintf(fp, format, va); else { char buffer[1001]; - int written = PyOS_vsnprintf(buffer, sizeof(buffer), - format, va); + const int written = PyOS_vsnprintf(buffer, sizeof(buffer), + format, va); + const int trouble = written < 0 || written >= sizeof(buffer); + if (trouble) { + /* Ensure there's a trailing null byte -- MS + vsnprintf fills the buffer to the very end + if it's not big enough. */ + buffer[sizeof(buffer) - 1] = '\0'; + } if (PyFile_WriteString(buffer, file) != 0) { PyErr_Clear(); fputs(buffer, fp); } - if (written == -1 || written > sizeof(buffer)) { + if (trouble) { const char *truncated = "... truncated"; if (PyFile_WriteString(truncated, file) != 0) { PyErr_Clear();
