Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 33.9k
Open
Labels
extension-modulesC modules in the Modules dirC modules in the Modules dirtopic-IOtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
BufferedReader.read1() can leave the object in a broken (reentrant) state after an allocation failure.
Reproducer
importioimportsysdefrepro(): br=io.BufferedReader(io.BytesIO(b"hello world"), buffer_size=8) huge=10**18try: br.read1(huge) exceptExceptionase: print("first call exception:", type(e).__name__, e) try: x=br.read1(1) print("second call ok:", x) exceptExceptionase: print("second call exception:", type(e).__name__, e) br2=io.BufferedReader(io.BytesIO(b"hello world"), buffer_size=8) print("fresh object read1:", br2.read1(1)) if__name__=="__main__": print("python:", sys.version) repro()Wrong behavior
D:\MyCode\cpython\PCbuild\amd64>python_d.exe py_iobuffer.py python: 3.15.0a3+ (heads/main-dirty:78e868fa28, Jan 11 2026, 12:40:52) [MSC v.1950 64 bit (AMD64)] first call exception: MemoryError second call exception: RuntimeError reentrant call inside <_io.BufferedReader> fresh object read1: b'h' Exception ignored while finalizing file <_io.BufferedReader>: Traceback (most recent call last): File "D:\MyCode\cpython\PCbuild\amd64\py_iobuffer.py", line 24, in<module>repro() ~~~~~^^ RuntimeError: reentrant call inside <_io.BufferedReader>CPython versions tested on:
CPython main branch
Operating systems tested on:
Windows
Linked PRs
Metadata
Metadata
Assignees
Labels
extension-modulesC modules in the Modules dirC modules in the Modules dirtopic-IOtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error