Patches #1298449 and #1298499: Add some missing checks for error

returns in cStringIO.c.  Thanks to Andrew Bennetts.

This must be a backport candidate.
This commit is contained in:
Michael W. Hudson 2005-09-22 09:19:01 +00:00
parent 19e11c86a7
commit 10402a306f
4 changed files with 26 additions and 7 deletions

View 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()

View File

@ -50,6 +50,7 @@ Reimer Behrends
Thomas Bellman
Juan M. Bello Rivas
Alexander Belopolsky
Andrew Bennetts
Andy Bensky
Michel Van den Bergh
Eric Beser

View File

@ -149,6 +149,9 @@ present).
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

View 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,13 +443,18 @@ 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[] = {
/* Common methods: */
{"flush", (PyCFunction)IO_flush, METH_NOARGS, IO_flush__doc__},