{"id":"RUSTSEC-2026-0396","aliases":[],"status":"published","title":"`Seekable` reads a NULL or out-of-bounds seek table","description":"`Seekable` did not record whether it was initialized. On a fresh `Seekable`,\nor one whose `init_buff()` failed, `decompress`, `offset_to_frame_index` and\n`frame_decompressed_size` made the C library read a NULL seek table. After a\nfailed re-initialization, `decompress` returned data from the refused buffer\nusing the previous seek table.\n\nSeparately, `frame_decompressed_size(num_frames())`, on `Seekable` and\n`SeekTable`, read one entry past the end of the seek table.\n\nThe flaw was corrected by refusing to use a `Seekable` until an\ninitialization succeeded, and by checking the frame index.","facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"published":"2026-10-16T12:00:00Z","modified":"2026-11-02T09:30:03Z","fixes":[{"ecosystem":"crates.io","package":"zstd-safe","fixed_in":["7.4.0","8.2.0"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"crates.io","package":"zstd-safe","ranges":[{"type":"SEMVER","events":[{"introduced":"7.2.2"},{"fixed":"7.4.0"},{"introduced":"8.0.0-0"},{"fixed":"8.2.0"}]}]}],"references":[{"url":"https://crates.io/crates/zstd-safe","tags":["package"]},{"url":"https://rustsec.org/advisories/RUSTSEC-2026-0396.html","tags":["advisory"]},{"url":"https://github.com/gyscos/zstd-rs/commit/a9626069d6f2e90b782b8f627f57a361cfe8ef85","tags":["web"]},{"url":"https://github.com/gyscos/zstd-rs/pull/384","tags":["web"]}],"sources":{"osv":[{"id":"RUSTSEC-2026-0396","title":"`Seekable` reads a NULL or out-of-bounds seek table","description":"`Seekable` did not record whether it was initialized. On a fresh `Seekable`,\nor one whose `init_buff()` failed, `decompress`, `offset_to_frame_index` and\n`frame_decompressed_size` made the C library read a NULL seek table. After a\nfailed re-initialization, `decompress` returned data from the refused buffer\nusing the previous seek table.\n\nSeparately, `frame_decompressed_size(num_frames())`, on `Seekable` and\n`SeekTable`, read one entry past the end of the seek table.\n\nThe flaw was corrected by refusing to use a `Seekable` until an\ninitialization succeeded, and by checking the frame index.","status":"published","published":"2026-10-16T12:00:00Z","modified":"2026-11-02T09:30:03.400899521Z","updated_at":"2026-11-02T15:53:40.430679Z"}]}}
