Kaydet (Commit) 080d5b3f authored tarafından Tim Peters's avatar Tim Peters

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.
üst 64be0b4a
...@@ -1023,13 +1023,20 @@ mywrite(char *name, FILE *fp, const char *format, va_list va) ...@@ -1023,13 +1023,20 @@ 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];
int written = PyOS_vsnprintf(buffer, sizeof(buffer), const int written = PyOS_vsnprintf(buffer, sizeof(buffer),
format, va); 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) { if (PyFile_WriteString(buffer, file) != 0) {
PyErr_Clear(); PyErr_Clear();
fputs(buffer, fp); fputs(buffer, fp);
} }
if (written == -1 || written > sizeof(buffer)) { if (trouble) {
const char *truncated = "... truncated"; const char *truncated = "... truncated";
if (PyFile_WriteString(truncated, file) != 0) { if (PyFile_WriteString(truncated, file) != 0) {
PyErr_Clear(); PyErr_Clear();
......
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