[3.11] gh-95782: Fix io.BufferedReader.tell() etc. being able to return offsets < 0 (GH-99709) #115600
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
lseek() always returns 0 for character pseudo-devices like
/dev/urandom
(for other non-regular files, e.g./dev/stdin
, italways 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
thatwraps 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()
orBufferedReader.seek()
being able to returnpositions < 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.
(cherry picked from commit 26800cf)
Co-authored-by: 6t8k 58048945+6t8k@users.noreply.github.com
_io.BufferedReader.tell
#95782