]> git.lizzy.rs Git - rust.git/commitdiff
Replace pointer casting in hashmap_random_keys with safe code
authorBlackHoleFox <blackholefoxdev@gmail.com>
Tue, 9 Aug 2022 01:49:12 +0000 (18:49 -0700)
committerBlackHoleFox <blackholefoxdev@gmail.com>
Tue, 9 Aug 2022 01:49:17 +0000 (18:49 -0700)
The old code was unnecessarily unsafe and relied on the layout
of tuples always being the same as an array of the same size.

library/std/src/sys/unix/rand.rs

index bf49204881d1643ef95ce45ca4f990698a88344f..a6fe07873d7ee4263b9362d9a5dda75c35916582 100644 (file)
@@ -1,13 +1,13 @@
-use crate::mem;
-use crate::slice;
-
 pub fn hashmap_random_keys() -> (u64, u64) {
-    let mut v = (0, 0);
-    unsafe {
-        let view = slice::from_raw_parts_mut(&mut v as *mut _ as *mut u8, mem::size_of_val(&v));
-        imp::fill_bytes(view);
-    }
-    v
+    const KEY_LEN: usize = core::mem::size_of::<u64>();
+
+    let mut v = [0u8; KEY_LEN * 2];
+    imp::fill_bytes(&mut v);
+
+    let key1 = v[0..KEY_LEN].try_into().unwrap();
+    let key2 = v[KEY_LEN..].try_into().unwrap();
+
+    (u64::from_ne_bytes(key1), u64::from_ne_bytes(key2))
 }
 
 #[cfg(all(