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
Bug report
Bug description:
All other compression modules raise
io.UnsupportedOperationwhen iterating over a non-readable file:But
ZstdFile.__next__doesn't call_check_can_read(), so it dereferencesself._buffer, which isNonein write mode:This results in:
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
AttributeErrorwhen iterating over a non-readableZstdFile#153045