mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Patch 1012740: cStringIO's truncate doesn't
truncate() left the stream position unchanged, which meant the "truncated" data didn't go away: >>> io.write('abc') >>> io.truncate(0) >>> io.write('xyz') >>> io.getvalue() 'abcxyz' Patch by Dima Dorfman.
This commit is contained in:
parent
7109b287cf
commit
037b3ee44e
3 changed files with 9 additions and 2 deletions
|
@ -49,9 +49,10 @@ class TestGenericStringIO(unittest.TestCase):
|
|||
f.seek(10)
|
||||
f.truncate()
|
||||
eq(f.getvalue(), 'abcdefghij')
|
||||
f.seek(0)
|
||||
f.truncate(5)
|
||||
eq(f.getvalue(), 'abcde')
|
||||
f.write('xyz')
|
||||
eq(f.getvalue(), 'abcdexyz')
|
||||
f.close()
|
||||
self.assertRaises(ValueError, f.write, 'frobnitz')
|
||||
|
||||
|
|
|
@ -41,6 +41,11 @@ Core and builtins
|
|||
Extension modules
|
||||
-----------------
|
||||
|
||||
- Patch 1012740: truncate() on a writeable cStringIO now resets the
|
||||
position to the end of the stream. This is consistent with the original
|
||||
StringIO module and avoids inadvertently resurrecting data that was
|
||||
supposed to have been truncated away.
|
||||
|
||||
- Added socket.socketpair().
|
||||
|
||||
Library
|
||||
|
|
|
@ -289,6 +289,7 @@ IO_truncate(IOobject *self, PyObject *args) {
|
|||
if (pos < 0) pos = self->pos;
|
||||
|
||||
if (self->string_size > pos) self->string_size = pos;
|
||||
self->pos = self->string_size;
|
||||
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue