---
id: RUSTSEC-2026-0401
title: Out-of-bounds read in `train_from_buffer` when sample sizes overflow
summary: Out-of-bounds read in `train_from_buffer` when sample sizes overflow
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.353698025Z'
source: OSV
sourceUrl: 'https://osv.dev/vulnerability/RUSTSEC-2026-0401'
references:
  - url: 'https://crates.io/crates/zstd-safe'
  - url: 'https://rustsec.org/advisories/RUSTSEC-2026-0401.html'
  - url: >-
      https://github.com/gyscos/zstd-rs/commit/781ea454191dbf178d09c1daf6fc896d15fbaa2f
  - url: 'https://github.com/gyscos/zstd-rs/pull/384'
tags:
  - osv
  - rust
ingestedAt: '2026-10-27T16:20:12.105Z'
---

## Overview

`ZDICT_trainFromBuffer` is never told the length of the samples buffer, so
`train_from_buffer` checked that the sample sizes add up to it. With
overflow checks off, as in release builds, that sum wrapped around: sizes
totalling 2^64 plus the buffer length passed the check, and the trainer read
past the end of the buffer. `zstd::dict::from_continuous` relies on this
check from zstd 0.4.10; older versions of zstd had their own, covered by a
separate advisory.

This requires the sample sizes to come from an untrusted source. The flaw
was corrected by summing the sizes with overflow checks.

## Affected packages

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

## Remediation

Upgrade to a patched release:

- `zstd-safe 8.2.0`
