Skip to content
OpenAdvisories
Unscored RUSTSEC-2026-0400

Use-after-free of a dictionary after a one-shot call on a context with an open stream

Published Oct 16, 2026 · Updated Nov 2, 2026 · Assigned by RUSTSEC

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.

Affected packages

EcosystemPackageAffectedFixedRecord
crates.io zstd-safe >= 3.0.1, < 7.4.0 · >= 8.0.0-0, < 8.2.0 7.4.0, 8.2.0 RUSTSEC-2026-0400

References