diff --git a/Lib/test/test_StringIO.py b/Lib/test/test_StringIO.py index c318eaafc79..6842c5ef88d 100644 --- a/Lib/test/test_StringIO.py +++ b/Lib/test/test_StringIO.py @@ -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') diff --git a/Misc/NEWS b/Misc/NEWS index a8aee9c3209..6b1dcff26e1 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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. diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c index 7e75879215a..b7333fdd380 100644 --- a/Modules/cStringIO.c +++ b/Modules/cStringIO.c @@ -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;