From: Jeremy Hylton Date: Wed, 28 Nov 2001 21:44:53 +0000 (+0000) Subject: Use PyOS_vsnprintf() and check its return value. X-Git-Tag: v2.2.1c1~661 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5d3d134d560d24a9e6b9d65dd814542605c0b152;p=thirdparty%2FPython%2Fcpython.git Use PyOS_vsnprintf() and check its return value. If it returns -1 (which indicates overflow on old Linux platforms and perhaps on Windows) or size greater than buffer, write a message indicating that the previous message was truncated. --- diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 1ca69b4da7e9..8b27b37b76b7 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1023,12 +1023,19 @@ mywrite(char *name, FILE *fp, const char *format, va_list va) vfprintf(fp, format, va); else { char buffer[1001]; - if (vsprintf(buffer, format, va) >= sizeof(buffer)) - Py_FatalError("PySys_WriteStdout/err: buffer overrun"); + int written = PyOS_vsnprintf(buffer, sizeof(buffer), + format, va); if (PyFile_WriteString(buffer, file) != 0) { PyErr_Clear(); fputs(buffer, fp); } + if (written == -1 || written > sizeof(buffer)) { + const char *truncated = "... truncated"; + if (PyFile_WriteString(truncated, file) != 0) { + PyErr_Clear(); + fputs(truncated, fp); + } + } } PyErr_Restore(error_type, error_value, error_traceback); }