mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
lseek() always returns 0 for character pseudo-devices like `/dev/urandom` (for other non-regular files, e.g. `/dev/stdin`, it always returns -1, to which CPython reacts by raising appropriate exceptions). They are thus technically seekable despite not having seek semantics. When calling read() on e.g. an instance of `io.BufferedReader` that wraps such a file, `BufferedReader` reads ahead, filling its buffer, creating a discrepancy between the number of bytes read and the internal `tell()` always returning 0, which previously resulted in e.g. `BufferedReader.tell()` or `BufferedReader.seek()` being able to return positions < 0 even though these are supposed to be always >= 0. Invariably keep the return value non-negative by returning max(former_return_value, 0) instead, and add some corresponding tests.
4 lines
243 B
ReStructuredText
4 lines
243 B
ReStructuredText
Fix :func:`io.BufferedReader.tell`, :func:`io.BufferedReader.seek`,
|
|
:func:`_pyio.BufferedReader.tell`, :func:`io.BufferedRandom.tell`,
|
|
:func:`io.BufferedRandom.seek` and :func:`_pyio.BufferedRandom.tell`
|
|
being able to return negative offsets.
|