]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport (with Anthony's blessing (in fact he reminded me to do it :)):
authorMichael W. Hudson <mwh@python.net>
Mon, 26 Sep 2005 13:15:34 +0000 (13:15 +0000)
committerMichael W. Hudson <mwh@python.net>
Mon, 26 Sep 2005 13:15:34 +0000 (13:15 +0000)
Patches #1298449 and #1298499: Add some missing checks for error
returns in cStringIO.c.  Thanks to Andrew Bennetts.

This must be a backport candidate.

Lib/test/test_StringIO.py
Misc/ACKS
Misc/NEWS
Modules/cStringIO.c

index e74a427af0b3bccce95194b84714a7eef9a1ea98..c61f7cc54a3c401dbcac7c224b3eb4ee86beee30 100644 (file)
@@ -44,6 +44,13 @@ class TestGenericStringIO(unittest.TestCase):
         f.seek(0)
         self.assertEqual(f.getvalue(), 'abc')
 
+    def test_writelines_error(self):
+        def errorGen():
+            yield 'a'
+            raise KeyboardInterrupt()
+        f = self.MODULE.StringIO()
+        self.assertRaises(KeyboardInterrupt, f.writelines, errorGen())
+
     def test_truncate(self):
         eq = self.assertEqual
         f = self.MODULE.StringIO()
index 3c59b4f138f18f993f63f36b57755b0b9b7d6dfa..c599172bdf577d2d6b977cbed85345db36927ca8 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -49,6 +49,7 @@ Reimer Behrends
 Thomas Bellman
 Juan M. Bello Rivas
 Alexander Belopolsky
+Andrew Bennetts
 Andy Bensky
 Michel Van den Bergh
 Eric Beser
index cc2ac30af51606c980201301ab775d1c3c2d0759..4d87425b8358e164e302242b1d03eb20b6953c86 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -16,6 +16,9 @@ Core and builtins
 Extension Modules
 -----------------
 
+- Patches #1298449 and #1298499: Add some missing checks for error
+  returns in cStringIO.c.
+
 - Patch #1297028: fix segfault if call type on MultibyteCodec,
   MultibyteStreamReader, or MultibyteStreamWriter.
 
index b7333fdd380d458df262c7d852b358e5bff1d2ec..e89111415cf46139b23651972bac7ece890e8cad 100644 (file)
@@ -241,7 +241,10 @@ IO_readlines(IOobject *self, PyObject *args) {
                line = PyString_FromStringAndSize (output, n);
                if (!line) 
                         goto err;
-               PyList_Append (result, line);
+               if (PyList_Append (result, line) == -1) {
+                       Py_DECREF (line);
+                       goto err;
+               }
                Py_DECREF (line);
                 length += n;
                 if (hint > 0 && length >= hint)
@@ -440,11 +443,17 @@ O_writelines(Oobject *self, PyObject *args) {
                        Py_DECREF(it);
                        Py_DECREF(s);
                        return NULL;
-               }
-               Py_DECREF(s);
-       }
-       Py_DECREF(it);
-       Py_RETURN_NONE;
+               }
+               Py_DECREF(s);
+       }
+
+       Py_DECREF(it);
+
+       /* See if PyIter_Next failed */
+       if (PyErr_Occurred())
+               return NULL;
+
+       Py_RETURN_NONE;
 }
 
 static struct PyMethodDef O_methods[] = {