GitHub Advisoryadvisory · crates.io

GHSA-xqjr-wfx3-gmxv ArrayQueue's push_front is not panic-safe

MEDIUM Published 2025-09-02 Modified 2025-09-02 Official page ↗
Ecosystem
crates.io
Packages
array-queue
Severity
Moderate
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Weaknesses
CWE-665
Reviewed
2025-09-02

Affected packages

• crates.io array-queue: >= 0.3.0, < 0.4.0 → fixed in 0.4.0

Description

The safe API `array_queue::ArrayQueue::push_front` can lead to deallocating uninitialized memory if a panic occurs while invoking the `clone` method on the passed argument. Specifically, `push_front` receives an argument that is intended to be cloned and pushed, whose type implements the `Clone` trait. Furthermore, the method updates the queue's `start` index before initializing the slot for the newly pushed element. User-defined implementations of `Clone` may include a `clone` method that can panic. If such a panic occurs during initialization, the structure is left with an advanced `start` index pointing to an uninitialized slot. When `ArrayQueue` is later dropped, its destructor treats that slot as initialized and attempts to drop it, resulting in an attempt to free uninitialized memory. The bug was fixed in commit `728fe1b`.

Related

Weakness · CWE (1)

  • CWE-665 Improper Initialization weakness

References