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