---
id: RUSTSEC-2026-0400
title: >-
  Use-after-free of a dictionary after a one-shot call on a context with an open
  stream
summary: >-
  Use-after-free of a dictionary after a one-shot call on a context with an open
  stream
severity: none
vendor: zstd-safe
product: zstd-safe
ecosystem: rust
affected:
  - 'zstd-safe >= 8.0.0-0, < 8.2.0'
patched:
  - zstd-safe 8.2.0
published: '2026-10-16'
updated: '2026-11-02'
sourceUpdated: '2026-11-02T09:30:03.428341570Z'
source: OSV
sourceUrl: 'https://osv.dev/vulnerability/RUSTSEC-2026-0400'
references:
  - url: 'https://crates.io/crates/zstd-safe'
  - url: 'https://rustsec.org/advisories/RUSTSEC-2026-0400.html'
  - url: >-
      https://github.com/gyscos/zstd-rs/commit/d34502a0ed07f80ab2aa4c65059578e0466f2467
  - url: 'https://github.com/gyscos/zstd-rs/pull/384'
tags:
  - osv
  - rust
ingestedAt: '2026-10-27T16:20:12.104Z'
---

## Overview

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

- `zstd-safe >= 8.0.0-0, < 8.2.0`

## Remediation

Upgrade to a patched release:

- `zstd-safe 8.2.0`
