Bug report
Bug description:
All other compression modules raise io.UnsupportedOperation when iterating over a non-readable file:
next(iter(lzma.LZMAFile(io.BytesIO(), "w"))) # io.UnsupportedOperation: File not open for reading next(iter(bz2.BZ2File(io.BytesIO(), "w"))) # io.UnsupportedOperation: ... next(iter(gzip.GzipFile(fileobj=io.BytesIO(), mode="w"))) # ...
But ZstdFile.__next__ doesn't call _check_can_read(), so it dereferences self._buffer, which is None in write mode:
import io from compression.zstd import ZstdFile next(iter(ZstdFile(io.BytesIO(), "w")))
This results in:
AttributeError: 'NoneType' object has no attribute 'readline'
CPython versions tested on:
3.14, 3.15, CPython main branch
Operating systems tested on:
macOS, but it does not depend on OS
Linked PRs
- gh-153037: Fix
AttributeErrorwhen iterating over a non-readableZstdFile#153045 - [3.15] gh-153037: Make ZstdFile.__next__ raise io.UnsupportedOperation on non-readable files (GH-153045) #153638
- [3.14] gh-153037: Make ZstdFile.__next__ raise io.UnsupportedOperation on non-readable files (GH-153045) #153639