[Python-checkins] cpython (3.4): Issue #23796: peak and read1 methods of BufferedReader now raise ValueError

berker.peksag python-checkins at python.org
Tue May 12 16:15:05 CEST 2015


https://hg.python.org/cpython/rev/7d722c9049ff
changeset:   95979:7d722c9049ff
branch:      3.4
parent:      95966:6df4045c7f85
user:        Berker Peksag <berker.peksag at gmail.com>
date:        Tue May 12 17:13:56 2015 +0300
summary:
  Issue #23796: peak and read1 methods of BufferedReader now raise ValueError
if they called on a closed object.

Patch by John Hergenroeder.

files:
  Lib/test/test_io.py      |  8 ++++++++
  Misc/NEWS                |  3 +++
  Modules/_io/bufferedio.c |  5 +++++
  3 files changed, 16 insertions(+), 0 deletions(-)


diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -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 --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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 --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -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);
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list