- Reported
-
- Issued
-
- Package
-
zstd-safe
(crates.io)
- Type
-
Vulnerability
- Categories
-
- Keywords
-
#seekable
#out-of-bounds
- References
-
- Patched
-
- Unaffected
-
- Affected Functions
- Version
zstd_safe::seekable::AdvancedSeekable::decompress
-
zstd_safe::seekable::Seekable::decompress
-
Description
ZSTD_seekable_decompress shortens the requested length to the end of the
data without checking that the offset is before it. For an offset past the
end, it returns a wrapped-around length without writing anything, and
Seekable::decompress passed that length to Vec::set_len.
With the seekable feature, whoever supplies the archive, or chooses the
offset, can leave the caller's Vec<u8> with a length far beyond its
capacity. Reading it then discloses neighbouring heap memory, and appending
to it corrupts memory. Offsets near u64::MAX can also hang the call.
The flaw was corrected by clamping requests to the end of the data, and by
checking every count reported by the C library against the buffer capacity.
Advisory available under CC0-1.0
license.