mirror of https://github.com/python/cpython
Fixed bug #1081: file.seek allows float arguments
This commit is contained in:
parent
8bd14fb398
commit
8e42a0a0e0
|
@ -694,6 +694,8 @@ class BytesIO(BufferedIOBase):
|
|||
return n
|
||||
|
||||
def seek(self, pos, whence=0):
|
||||
if not isinstance(pos, int):
|
||||
raise TypeError("an integer is required")
|
||||
if whence == 0:
|
||||
self._pos = max(0, pos)
|
||||
elif whence == 1:
|
||||
|
|
|
@ -95,6 +95,7 @@ class IOTest(unittest.TestCase):
|
|||
self.assertEqual(f.tell(), 13)
|
||||
self.assertEqual(f.truncate(12), 12)
|
||||
self.assertEqual(f.tell(), 13)
|
||||
self.assertRaises(TypeError, f.seek, 0.0)
|
||||
|
||||
def read_ops(self, f, buffered=False):
|
||||
data = f.read(5)
|
||||
|
@ -116,6 +117,7 @@ class IOTest(unittest.TestCase):
|
|||
self.assertEqual(f.seek(-6, 1), 5)
|
||||
self.assertEqual(f.read(5), b" worl")
|
||||
self.assertEqual(f.tell(), 10)
|
||||
self.assertRaises(TypeError, f.seek, 0.0)
|
||||
if buffered:
|
||||
f.seek(0)
|
||||
self.assertEqual(f.read(), b"hello world\n")
|
||||
|
@ -296,6 +298,7 @@ class MemorySeekTestMixin:
|
|||
|
||||
bytesIo.seek(3)
|
||||
self.assertEquals(buf[3:], bytesIo.read())
|
||||
self.assertRaises(TypeError, bytesIo.seek, 0.0)
|
||||
|
||||
def testTell(self):
|
||||
buf = self.buftype("1234567890")
|
||||
|
@ -481,6 +484,7 @@ class BufferedRandomTest(unittest.TestCase):
|
|||
rw.seek(2, 1)
|
||||
self.assertEquals(7, rw.tell())
|
||||
self.assertEquals(b"fl", rw.read(11))
|
||||
self.assertRaises(TypeError, rw.seek, 0.0)
|
||||
|
||||
|
||||
class TextIOWrapperTest(unittest.TestCase):
|
||||
|
|
|
@ -556,6 +556,10 @@ portable_lseek(int fd, PyObject *posobj, int whence)
|
|||
if (posobj == NULL)
|
||||
pos = 0;
|
||||
else {
|
||||
if(PyFloat_Check(posobj)) {
|
||||
PyErr_SetString(PyExc_TypeError, "an integer is required");
|
||||
return NULL;
|
||||
}
|
||||
#if !defined(HAVE_LARGEFILE_SUPPORT)
|
||||
pos = PyInt_AsLong(posobj);
|
||||
#else
|
||||
|
|
Loading…
Reference in New Issue