diff Modules/cStringIO.c @ 35623:774bf9a38b2a legacy-trunk

Patches #1298449 and #1298499: Add some missing checks for error returns in cStringIO.c. Thanks to Andrew Bennetts. This must be a backport candidate.
author Michael W. Hudson <mwh@python.net>
date Thu, 22 Sep 2005 09:19:01 +0000
parents db1bafa9b656
children 9541369b0dca
line wrap: on
line diff
--- a/Modules/cStringIO.c	Wed Sep 21 20:52:11 2005 +0000
+++ b/Modules/cStringIO.c	Thu Sep 22 09:19:01 2005 +0000
@@ -241,7 +241,10 @@
 		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,13 +443,18 @@
 			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[] = {
   /* Common methods: */
   {"flush",     (PyCFunction)IO_flush,    METH_NOARGS,  IO_flush__doc__},