[Python-checkins] r69848 - in python/branches/io-c/Lib: _pyio.py test/test_io.py

benjamin.peterson python-checkins at python.org
Sat Feb 21 22:33:54 CET 2009


Author: benjamin.peterson
Date: Sat Feb 21 22:33:53 2009
New Revision: 69848

Log:
fix some more tests broken by bag argument validation

Modified:
   python/branches/io-c/Lib/_pyio.py
   python/branches/io-c/Lib/test/test_io.py

Modified: python/branches/io-c/Lib/_pyio.py
==============================================================================
--- python/branches/io-c/Lib/_pyio.py	(original)
+++ python/branches/io-c/Lib/_pyio.py	Sat Feb 21 22:33:53 2009
@@ -820,6 +820,8 @@
         """
         raw._checkReadable()
         _BufferedIOMixin.__init__(self, raw)
+        if buffer_size <= 0:
+            raise ValueError("invalid buffer size")
         self.buffer_size = buffer_size
         self._reset_read_buf()
         self._read_lock = Lock()
@@ -836,6 +838,8 @@
         mode. If n is negative, read until EOF or until read() would
         block.
         """
+        if n is not None and n < -1:
+            raise ValueError("invalid number of bytes to read")
         with self._read_lock:
             return self._read_unlocked(n)
 
@@ -910,7 +914,9 @@
         """Reads up to n bytes, with at most one read() system call."""
         # Returns up to n bytes.  If at least one byte is buffered, we
         # only return buffered bytes.  Otherwise, we do one raw read.
-        if n <= 0:
+        if n < 0:
+            raise ValueError("number of bytes ot read must be positive")
+        if n == 0:
             return b""
         with self._read_lock:
             self._peek_unlocked(1)
@@ -921,6 +927,8 @@
         return self.raw.tell() - len(self._read_buf) + self._read_pos
 
     def seek(self, pos, whence=0):
+        if not (0 <= whence <= 2):
+            raise ValueError("invalid whence value")
         with self._read_lock:
             if whence == 1:
                 pos -= len(self._read_buf) - self._read_pos
@@ -942,6 +950,8 @@
                  buffer_size=DEFAULT_BUFFER_SIZE, max_buffer_size=None):
         raw._checkWritable()
         _BufferedIOMixin.__init__(self, raw)
+        if buffer_size <= 0:
+            raise ValueError("invalid buffer size")
         self.buffer_size = buffer_size
         self.max_buffer_size = (2*buffer_size
                                 if max_buffer_size is None
@@ -1010,6 +1020,8 @@
         return self.raw.tell() + len(self._write_buf)
 
     def seek(self, pos, whence=0):
+        if not (0 <= whence <= 2):
+            raise ValueError("invalid whence")
         with self._write_lock:
             self._flush_unlocked()
             return self.raw.seek(pos, whence)
@@ -1298,6 +1310,8 @@
 
     def __init__(self, buffer, encoding=None, errors=None, newline=None,
                  line_buffering=False):
+        if newline is not None and not isinstance(newline, str):
+            raise TypeError("illegal newline type: %r" % (type(newline),))
         if newline not in (None, "", "\n", "\r", "\r\n"):
             raise ValueError("illegal newline value: %r" % (newline,))
         if encoding is None:

Modified: python/branches/io-c/Lib/test/test_io.py
==============================================================================
--- python/branches/io-c/Lib/test/test_io.py	(original)
+++ python/branches/io-c/Lib/test/test_io.py	Sat Feb 21 22:33:53 2009
@@ -556,11 +556,8 @@
         bufio.__init__(rawio, buffer_size=16)
         self.assertEquals(b"abc", bufio.read())
         self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0)
-        self.assertRaises(ValueError, bufio.read)
         self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16)
-        self.assertRaises(ValueError, bufio.read)
         self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1)
-        self.assertRaises(ValueError, bufio.read)
         if sys.maxsize > 0x7FFFFFFF:
             # The allocation can succeed on 32-bit builds, e.g. with more
             # than 2GB RAM and a 64-bit kernel.
@@ -719,6 +716,16 @@
     MockRawIO = CMockRawIO
     MockFileIO = CMockFileIO
 
+    def test_initialization(self):
+        rawio = self.MockRawIO([b"abc"])
+        bufio = self.tp(rawio)
+        self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0)
+        self.assertRaises(ValueError, bufio.read)
+        self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16)
+        self.assertRaises(ValueError, bufio.read)
+        self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1)
+        self.assertRaises(ValueError, bufio.read)
+
 class PyBufferedReaderTest(BufferedReaderTest):
     tp = pyio.BufferedReader
     BlockingIOError = pyio.BlockingIOError
@@ -740,11 +747,8 @@
         self.assertEquals(3, bufio.write(b"abc"))
         bufio.flush()
         self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0)
-        self.assertRaises(ValueError, bufio.write, b"def")
         self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16)
-        self.assertRaises(ValueError, bufio.write, b"def")
         self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1)
-        self.assertRaises(ValueError, bufio.write, b"def")
         if sys.maxsize > 0x7FFFFFFF:
             # The allocation can succeed on 32-bit builds, e.g. with more
             # than 2GB RAM and a 64-bit kernel.
@@ -958,6 +962,17 @@
     MisbehavedRawIO = CMisbehavedRawIO
     MockNonBlockWriterIO = CMockNonBlockWriterIO
 
+    def test_initialization(self):
+        rawio = self.MockRawIO()
+        bufio = self.tp(rawio)
+        self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=0)
+        self.assertRaises(ValueError, bufio.write, b"def")
+        self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-16)
+        self.assertRaises(ValueError, bufio.write, b"def")
+        self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1)
+        self.assertRaises(ValueError, bufio.write, b"def")
+
+
 class PyBufferedWriterTest(BufferedWriterTest):
     tp = pyio.BufferedWriter
     BlockingIOError = pyio.BlockingIOError
@@ -1302,9 +1317,7 @@
         self.assertEquals(t.line_buffering, True)
         self.assertEquals("\xe9\n", t.readline())
         self.assertRaises(TypeError, t.__init__, b, newline=42)
-        self.assertRaises(ValueError, t.read)
         self.assertRaises(ValueError, t.__init__, b, newline='xyzzy')
-        self.assertRaises(ValueError, t.read)
 
     def testLineBuffering(self):
         r = self.BytesIO()
@@ -1792,6 +1805,15 @@
     TextIOWrapper = io.TextIOWrapper
     BytesIO = io.BytesIO
 
+    def test_initialization(self):
+        r = self.BytesIO(b"\xc3\xa9\n\n")
+        b = self.BufferedReader(r, 1000)
+        t = self.TextIOWrapper(b)
+        self.assertRaises(TypeError, t.__init__, b, newline=42)
+        self.assertRaises(ValueError, t.read)
+        self.assertRaises(ValueError, t.__init__, b, newline='xyzzy')
+        self.assertRaises(ValueError, t.read)
+
 class PyTextIOWrapperTest(TextIOWrapperTest):
     open = staticmethod(pyio.open)
     BufferedReader = pyio.BufferedReader


More information about the Python-checkins mailing list