mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
Merged revisions 74336 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r74336 | antoine.pitrou | 2009-08-06 22:18:29 +0200 (jeu., 06 août 2009) | 8 lines Issue #6629: Fix a data corruption issue in the new `io` package, which could occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or "wb+" mode) after having buffered a certain amount of data for reading. This bug was not present in the pure Python implementation. Yes, this is a serious issue. ........
This commit is contained in:
parent
5a5453978f
commit
a0ceb731fb
3 changed files with 38 additions and 0 deletions
|
|
@ -1757,6 +1757,19 @@ bufferedwriter_write(buffered *self, PyObject *args)
|
|||
}
|
||||
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue