diff options
author | Georg Brandl <georg@python.org> | 2006-08-14 21:42:55 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2006-08-14 21:42:55 (GMT) |
commit | 3335a7ad63092d232098fec292cf9b3a25c66a83 (patch) | |
tree | f2295faf6d6fb32d537ca1e94237ecd1d3dabbce | |
parent | 2463f8f831bdf7ed562a26a13a6214f203f0b037 (diff) | |
download | cpython-3335a7ad63092d232098fec292cf9b3a25c66a83.zip cpython-3335a7ad63092d232098fec292cf9b3a25c66a83.tar.gz cpython-3335a7ad63092d232098fec292cf9b3a25c66a83.tar.bz2 |
Patch #1535500: fix segfault in BZ2File.writelines and make sure it
raises the correct exceptions.
-rw-r--r-- | Lib/test/test_bz2.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/bz2module.c | 19 |
3 files changed, 22 insertions, 2 deletions
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py index 56b5ffa..35eae1e 100644 --- a/Lib/test/test_bz2.py +++ b/Lib/test/test_bz2.py @@ -166,6 +166,8 @@ class BZ2FileTest(BaseTest): sio = StringIO(self.TEXT) bz2f.writelines(sio.readlines()) bz2f.close() + # patch #1535500 + self.assertRaises(ValueError, bz2f.writelines, ["a"]) f = open(self.filename, 'rb') self.assertEqual(self.decompress(f.read()), self.TEXT) f.close() @@ -79,6 +79,9 @@ Library Extension Modules ----------------- +- Patch #1535500: fix segfault in BZ2File.writelines and make sure it + raises the correct exceptions. + - Patch # 1536908: enable building ctypes on OpenBSD/AMD64. The '-no-stack-protector' compiler flag for OpenBSD has been removed. diff --git a/Modules/bz2module.c b/Modules/bz2module.c index 5e5a801..24b2489 100644 --- a/Modules/bz2module.c +++ b/Modules/bz2module.c @@ -812,12 +812,12 @@ BZ2File_write(BZ2FileObject *self, PyObject *args) case MODE_CLOSED: PyErr_SetString(PyExc_ValueError, "I/O operation on closed file"); - goto cleanup;; + goto cleanup; default: PyErr_SetString(PyExc_IOError, "file is not ready for writing"); - goto cleanup;; + goto cleanup; } self->f_softspace = 0; @@ -861,6 +861,21 @@ BZ2File_writelines(BZ2FileObject *self, PyObject *seq) int bzerror; ACQUIRE_LOCK(self); + switch (self->mode) { + case MODE_WRITE: + break; + + case MODE_CLOSED: + PyErr_SetString(PyExc_ValueError, + "I/O operation on closed file"); + goto error; + + default: + PyErr_SetString(PyExc_IOError, + "file is not ready for writing"); + goto error; + } + islist = PyList_Check(seq); if (!islist) { iter = PyObject_GetIter(seq); |