diff options
| author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2024-02-17 12:56:00 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-17 12:56:00 (GMT) |
| commit | de347c02070f7b1e8a4810ece5e898b22b4070cd (patch) | |
| tree | 152df7e5e86d1756c75799148c89d95b9e8df39d /Lib/test/string_tests.py | |
| parent | d46a2a00086c16ee20840c0cce0fb03e9ea21fd0 (diff) | |
| download | cpython-de347c02070f7b1e8a4810ece5e898b22b4070cd.zip cpython-de347c02070f7b1e8a4810ece5e898b22b4070cd.tar.gz cpython-de347c02070f7b1e8a4810ece5e898b22b4070cd.tar.bz2 | |
[3.12] gh-95782: Fix io.BufferedReader.tell() etc. being able to return offsets < 0 (GH-99709) (GH-115599)
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.
(cherry picked from commit 26800cf25a0970d46934fa9a881c0ef6881d642b)
Co-authored-by: 6t8k <58048945+6t8k@users.noreply.github.com>
Diffstat (limited to 'Lib/test/string_tests.py')
0 files changed, 0 insertions, 0 deletions
