Skip to content

Commit 4d02c20

Browse files
fix: FileIO.seekable incorrectly returning false
1 parent b00a140 commit 4d02c20

2 files changed

Lines changed: 5 additions & 1 deletion

File tree

‎Lib/test/test_io/test_fileio.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ def testSeekTell(self):
6262
self.f.seek(-5, 2)
6363
self.assertEqual(self.f.tell(), 15)
6464

65+
def testSeekableAfterFailedSeek(self) -> None:
66+
self.assertRaises(OSError, self.f.seek, -1)
67+
self.assertTrue(self.f.seekable())
68+
6569
def testAttributes(self):
6670
# verify expected attributes exist
6771
f = self.f

‎Modules/_io/fileio.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,7 @@ portable_lseek(fileio *self, PyObject *posobj, int whence, bool suppress_pipe_er
10131013
_Py_END_SUPPRESS_IPH
10141014
Py_END_ALLOW_THREADS
10151015

1016-
if (self->seekable < 0) {
1016+
if (self->seekable < 0 && (res >= 0 || errno == ESPIPE || posobj == NULL)) {
10171017
self->seekable = (res >= 0);
10181018
}
10191019

0 commit comments

Comments
 (0)