Commit 3335a7ad authored by Georg Brandl's avatar Georg Brandl

Patch #1535500: fix segfault in BZ2File.writelines and make sure it

raises the correct exceptions.
parent 2463f8f8
......@@ -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.
......
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment