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();