SF bug #951915:  fix bug in StringIO.truncate - length not changed
(Patch by Armin Rigo.)
diff --git a/Lib/StringIO.py b/Lib/StringIO.py
index 1dfc8b4..5c463fb 100644
--- a/Lib/StringIO.py
+++ b/Lib/StringIO.py
@@ -204,6 +204,7 @@
         elif size < self.pos:
             self.pos = size
         self.buf = self.getvalue()[:size]
+        self.len = size
 
     def write(self, s):
         """Write a string to the file.
@@ -312,6 +313,11 @@
     print 'File length =', f.tell()
     if f.tell() != length:
         raise RuntimeError, 'bad length'
+    f.truncate(length/2)
+    f.seek(0, 2)
+    print 'Truncated length =', f.tell()
+    if f.tell() != length/2:
+        raise RuntimeError, 'truncate did not adjust length'
     f.close()
 
 if __name__ == '__main__':
diff --git a/Misc/NEWS b/Misc/NEWS
index 570adda..ad0518b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -30,6 +30,9 @@
 Library
 -------
 
+- StringIO.truncate() now correctly adjusts the size attribute.
+  (Bug #951915).
+
 - locale.py now uses an updated locale alias table (built using
   Tools/i18n/makelocalealias.py, a tool to parse the X11 locale
   alias file); the encoding lookup was enhanced to use Python's