lkk7 · GitHub

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

Read the original on github.com ↗