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