- Reported
-
- Issued
-
- Package
-
zstd-safe
(crates.io)
- Type
-
INFO
Unsound
- Categories
-
- Keywords
-
#use-after-free
#dictionary
- References
-
- Patched
-
- Unaffected
-
- Affected Functions
- Version
zstd_safe::DCtx::decompress
-
zstd_safe::DCtx::decompress_using_ddict
-
zstd_safe::DCtx::decompress_using_dict
-
Description
The one-shot DCtx and CCtx methods assumed the C library resets the
context, but it leaves an open stream as it is. When a stream was left
unfinished on a context, a one-shot call such as decompress_using_dict
could leave the context pointing at the dictionary borrowed for that call,
and the next streaming call resumed the stream against it after it was
freed: decompressed output then contained freed heap memory. On the
compression side, the stream resumed against the one-shot call's buffers.
This requires an application to use one context for both streaming and
one-shot calls without a reset in between. The flaw was corrected by
resetting the session after one-shot calls whenever a stream may be open.
Advisory available under CC0-1.0
license.