diff -r 922105d1e191 Modules/_io/bufferedio.c --- a/Modules/_io/bufferedio.c Wed Aug 05 01:19:13 2009 +0200 +++ b/Modules/_io/bufferedio.c Wed Aug 05 14:07:14 2009 +0200 @@ -1757,6 +1757,19 @@ bufferedwriter_write(buffered *self, PyO } Py_CLEAR(res); + /* Adjust the raw stream position if it is away from the logical stream + position. This happens if the read buffer has been filled but not + modified (and therefore _bufferedwriter_flush_unlocked() didn't rewind + the raw stream by itself). + Fixes issue #6629. + */ + n = RAW_OFFSET(self); + if (n != 0) { + if (_buffered_raw_seek(self, -n, 1) < 0) + goto error; + self->raw_pos -= n; + } + /* Then write buf itself. At this point the buffer has been emptied. */ remaining = buf.len; written = 0;