Closed
Description
Test code for struct offsets run checks like this:
assert_eq!(
unsafe { &(*(::core::ptr::null::<timeval>())).tv_sec as *const _ as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(timeval),
"::",
stringify!(tv_sec)
)
);
But it's UB to dereference a null pointer, and it's also UB to create a &T
with numeric value 0.
There is actually trivial to fix. Instead of using a null pointer, just create a value on the stack (using core::mem::zeroed()
, which is safe since all C structs can be created as zeroed-memory), and then use a reference to that stack value, the fields of that stack value, and so on.