Module clear_on_drop::clear
source · [−]Expand description
Traits to completely overwrite a value, without leaking data.
Examples
Basic use:
#[derive(Default)]
struct MyData {
value: u32,
}
let mut place = MyData { value: 0x01234567 };
place.clear();
assert_eq!(place.value, 0);
Showing no data is leaked:
#[derive(Default)]
struct MyData {
value: Option<u32>,
}
let mut place = MyData { value: Some(0x41414141) };
place.clear();
assert_eq!(place.value, None);
fn as_bytes<T>(x: &T) -> &[u8] {
unsafe {
slice::from_raw_parts(x as *const T as *const u8, mem::size_of_val(x))
}
}
assert!(!as_bytes(&place).contains(&0x41));
Traits
An operation to completely overwrite a value, without leaking data.
A type that can be initialized to a valid value, after being set to all-bits-zero.
Unsafe trait to indicate which types are safe to set to all-bits-zero.