changeset: 95979:7d722c9049ff branch: 3.4 parent: 95966:6df4045c7f85 user: Berker Peksag date: Tue May 12 17:13:56 2015 +0300 files: Lib/test/test_io.py Misc/NEWS Modules/_io/bufferedio.c description: Issue #23796: peak and read1 methods of BufferedReader now raise ValueError if they called on a closed object. Patch by John Hergenroeder. diff -r 6df4045c7f85 -r 7d722c9049ff Lib/test/test_io.py --- a/Lib/test/test_io.py Mon May 11 19:58:56 2015 -0700 +++ b/Lib/test/test_io.py Tue May 12 17:13:56 2015 +0300 @@ -1115,6 +1115,14 @@ self.assertEqual(rawio._extraneous_reads, 0, "failed for {}: {} != 0".format(n, rawio._extraneous_reads)) + def test_read_on_closed(self): + # Issue #23796 + b = io.BufferedReader(io.BytesIO(b"12")) + b.read(1) + b.close() + self.assertRaises(ValueError, b.peek) + self.assertRaises(ValueError, b.read1, 1) + class CBufferedReaderTest(BufferedReaderTest, SizeofTest): tp = io.BufferedReader diff -r 6df4045c7f85 -r 7d722c9049ff Misc/NEWS --- a/Misc/NEWS Mon May 11 19:58:56 2015 -0700 +++ b/Misc/NEWS Tue May 12 17:13:56 2015 +0300 @@ -45,6 +45,9 @@ Library ------- +- Issue #23796: peak and read1 methods of BufferedReader now raise ValueError + if they called on a closed object. Patch by John Hergenroeder. + - Issue #24134: assertRaises(), assertRaisesRegex(), assertWarns() and assertWarnsRegex() checks are not longer successful if the callable is None. diff -r 6df4045c7f85 -r 7d722c9049ff Modules/_io/bufferedio.c --- a/Modules/_io/bufferedio.c Mon May 11 19:58:56 2015 -0700 +++ b/Modules/_io/bufferedio.c Tue May 12 17:13:56 2015 +0300 @@ -889,6 +889,8 @@ PyObject *res = NULL; CHECK_INITIALIZED(self) + CHECK_CLOSED(self, "peek of closed file") + if (!PyArg_ParseTuple(args, "|n:peek", &n)) { return NULL; } @@ -963,6 +965,9 @@ "read length must be positive"); return NULL; } + + CHECK_CLOSED(self, "read of closed file") + if (n == 0) return PyBytes_FromStringAndSize(NULL, 0);