[Python-checkins] r69860 - in python/branches/io-c/Lib: _pyio.py test/test_io.py
benjamin.peterson
python-checkins at python.org
Sun Feb 22 00:42:51 CET 2009
Author: benjamin.peterson
Date: Sun Feb 22 00:42:50 2009
New Revision: 69860
Log:
fix some of these Misbehaving io tests
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 Sun Feb 22 00:42:50 2009
@@ -643,10 +643,16 @@
### Positioning ###
def seek(self, pos, whence=0):
- return self.raw.seek(pos, whence)
+ new_position = self.raw.seek(pos, whence)
+ if new_position < 0:
+ raise IOError("seek() returned an invalid position")
+ return new_position
def tell(self):
- return self.raw.tell()
+ pos = self.raw.tell()
+ if pos < 0:
+ raise IOError("tell() returned an invalid position")
+ return pos
def truncate(self, pos=None):
# Flush the stream. We're mixing buffered I/O with lower-level I/O,
@@ -924,7 +930,7 @@
min(n, len(self._read_buf) - self._read_pos))
def tell(self):
- return self.raw.tell() - len(self._read_buf) + self._read_pos
+ return super().tell() - len(self._read_buf) + self._read_pos
def seek(self, pos, whence=0):
if not (0 <= whence <= 2):
@@ -932,7 +938,7 @@
with self._read_lock:
if whence == 1:
pos -= len(self._read_buf) - self._read_pos
- pos = self.raw.seek(pos, whence)
+ pos = super().seek(pos, whence)
self._reset_read_buf()
return pos
@@ -1009,6 +1015,8 @@
try:
while self._write_buf:
n = self.raw.write(self._write_buf)
+ if n > len(self._write_buf) or n < 0:
+ raise IOError("write() returned incorrect number of bytes")
del self._write_buf[:n]
written += n
except BlockingIOError as e:
@@ -1018,14 +1026,14 @@
raise BlockingIOError(e.errno, e.strerror, written)
def tell(self):
- return self.raw.tell() + len(self._write_buf)
+ return super().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)
+ return super().seek(pos, whence)
class BufferedRWPair(BufferedIOBase):
@@ -1116,14 +1124,14 @@
self.flush()
# First do the raw seek, then empty the read buffer, so that
# if the raw seek fails, we don't lose buffered data forever.
- pos = self.raw.seek(pos, whence)
+ pos = super().seek(pos, whence)
with self._read_lock:
self._reset_read_buf()
return pos
def tell(self):
if self._write_buf:
- return self.raw.tell() + len(self._write_buf)
+ return super().tell() + len(self._write_buf)
else:
return BufferedReader.tell(self)
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 Sun Feb 22 00:42:50 2009
@@ -696,7 +696,6 @@
bufio = self.tp(rawio)
self.assertRaises(IOError, bufio.seek, 0)
self.assertRaises(IOError, bufio.tell)
- self.assertRaises(IOError, bufio.read, 10)
def test_garbage_collection(self):
# BufferedReader objects are collected
@@ -726,6 +725,13 @@
self.assertRaises(ValueError, bufio.__init__, rawio, buffer_size=-1)
self.assertRaises(ValueError, bufio.read)
+ def testMisbehavedRawIORead(self):
+ rawio = self.MisbehavedRawIO((b"abc", b"d", b"efg"))
+ bufio = self.tp(rawio)
+ # _pyio.BufferedReader seems to implement reading different, so that
+ # checking this is not so easy.
+ self.assertRaises(IOError, bufio.read, 10)
+
class PyBufferedReaderTest(BufferedReaderTest):
tp = pyio.BufferedReader
BlockingIOError = pyio.BlockingIOError
More information about the Python-checkins
mailing list