Commit 037b3ee4 authored by Tim Peters's avatar Tim Peters

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.
parent 7109b287
......@@ -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
......@@ -59,7 +64,7 @@ Library
- A new function tkFont.nametofont was added to return an existing
font. The Font class constructor now has an additional exists argument
which, if True, requests to return/configure an existing font, rather
than creating a new one.
than creating a new one.
- Updated the decimal package's min() and max() methods to match the
latest revision of the General Decimal Arithmetic Specification.
......
......@@ -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;
......
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