ZettaScaleLabs / stabby

A Stable ABI for Rust with compact sum-types
Other
337 stars 13 forks source link

Slices are unsound #96

Open js2xxx opened 1 week ago

js2xxx commented 1 week ago

The code below compiles without unsafe code but accesses memory out of the allocated range.

use stabby::slice::Slice;

fn main() {
    let v = vec![12, 34, 56];
    let mut s: Slice<'_, i32> = (&v[..]).into();
    println!("{:?}", s);
    println!("{:?} {:?}", s.start, s.len);
    s.start = s.start.map_addr(|a| a.checked_add(4).unwrap());
    println!("{:?}", s);
}

I think Slices and SliceMuts cannot expose their fields directly. Instead, equivalents to core::slice::from_raw_parts* and similar functions should be considered.