RustSec logo

History ⋅ Edit ⋅ JSON (OSV)

RUSTSEC-2026-0401

Out-of-bounds read in train_from_buffer when sample sizes overflow

Reported
Issued
Package
zstd-safe (crates.io)
Type
INFO Unsound
Categories
Keywords
#integer-overflow #out-of-bounds #dictionary
References
Patched
  • >=8.2.0
Affected Functions
Version
zstd_safe::train_from_buffer
  • <8.2.0

Description

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.

Advisory available under CC0-1.0 license.