Unsound MediumRUSTSEC-2020-0161 · array-macro
RUSTSEC-2020-0161: `array!` macro is unsound in presence of traits that implement methods it calls internally
Short answerarray-macro has an API that can cause undefined behaviour from safe code: `array!` macro is unsound in presence of traits that implement methods it calls internally. Fixed in 1.0.5.
| Crate | array-macro |
|---|---|
| Type | Unsound (memory-corruption) |
| Affected versions | From 0.1.2 before 1.0.5. |
| Fixed in | 1.0.5 |
| Severity | Medium (GitHub rating) |
| Published | 2020-05-07 |
| Last changed | 2023-11-08 |
| Also known as | GHSA-83gg-pwxf-jr89 |
What to do
- See which version you have:
cargo tree -i array-macro(it also shows which of your dependencies pulls it in). - Update within your version requirement:
cargo update -p array-macro. If the fix is a newer major or minor than your requirement allows, raise it in Cargo.toml (for examplearray-macro = "1.0.5") or update the dependency that pulls it in. - Check again with
cargo audit, or paste your Cargo.lock into our Cargo.toml checker.
Details from the advisory
Affected versions of this crate called some methods using auto-ref. The affected code looked like this.
let mut arr = $crate::__core::mem::MaybeUninit::uninit();
let mut vec = $crate::__ArrayVec::<T>::new(arr.as_mut_ptr() as *mut T);
In this case, the problem is that as_mut_ptr is a method of &mut MaybeUninit, not MaybeUninit. This made it possible for traits to hijack the method calls in order to cause unsoundness.
trait AsMutPtr<T> {
fn as_mut_ptr(&self) -> *mut T;
}
impl<T> AsMutPtr<T> for std::mem::MaybeUninit<T> {
fn as_mut_ptr(&self) -> *mut T {
std::ptr::null_mut()
}
}
array![0; 1];
The flaw was corrected by explicitly referencing variables in macro body in order to avoid auto-ref.
References
- Package: crates.io/crates/array-macro
- Advisory: rustsec.org/advisories/RUSTSEC-2020-0161.html
- Web: gitlab.com/KonradBorowski/array-macro/-/commit/01940637dd8f3bfeeee3faf9639fa9ae52f19f4d
From the RustSec Advisory Database (CC0-1.0) via the OSV export, downloaded Oct 24, 2026. Severity score computed from the published CVSS vector.
Other advisories for array-macro
Up next
Same cratearray-macro: security historyEvery advisory for this crate, and whether it is safe to use today.Read it next →Did this answer your question?