-
Notifications
You must be signed in to change notification settings - Fork 428
Open
Labels
Description
The source of unsoundness
Hi, we found an unsound implementation in unpack
which could create a misaligned pointer:
Lines 900 to 903 in 62a3019
fn unpack(data: &[u8], count: usize) -> Result<Vec<Self>> { | |
let tstrings = | |
unsafe { slice::from_raw_parts(data.as_ptr() as *const tf::TF_TString, count) }; | |
let mut out = Vec::with_capacity(count); |
At line 902, the
u8
pointer would cast to TF_TString
which had stronger alignment requirements. The misaligned pointer passed to slice::from_raw_parts
would break the safety guarantee. Please check and happy to have a discussion:)