Kaydet (Commit) 5d3d134d authored tarafından Jeremy Hylton's avatar Jeremy Hylton

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.
üst 4b4ab20f
...@@ -1023,12 +1023,19 @@ mywrite(char *name, FILE *fp, const char *format, va_list va) ...@@ -1023,12 +1023,19 @@ mywrite(char *name, FILE *fp, const char *format, va_list va)
vfprintf(fp, format, va); vfprintf(fp, format, va);
else { else {
char buffer[1001]; char buffer[1001];
if (vsprintf(buffer, format, va) >= sizeof(buffer)) int written = PyOS_vsnprintf(buffer, sizeof(buffer),
Py_FatalError("PySys_WriteStdout/err: buffer overrun"); format, va);
if (PyFile_WriteString(buffer, file) != 0) { if (PyFile_WriteString(buffer, file) != 0) {
PyErr_Clear(); PyErr_Clear();
fputs(buffer, fp); 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); PyErr_Restore(error_type, error_value, error_traceback);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment