implement SecRandomCopyBytes for macOS RNG
This commit is contained in:
parent
298bd1f9ce
commit
703b7f8a7e
@ -712,6 +712,18 @@ pub trait EvalContextExt<'a, 'mir, 'tcx: 'a + 'mir>: crate::MiriEvalContextExt<'
|
||||
"_NSGetArgv" => {
|
||||
this.write_scalar(Scalar::Ptr(this.machine.argv.unwrap()), dest)?;
|
||||
},
|
||||
"SecRandomCopyBytes" => {
|
||||
let len = this.read_scalar(args[1])?.to_usize(this)?;
|
||||
let ptr = this.read_scalar(args[2])?.to_ptr()?;
|
||||
|
||||
if len > 0 {
|
||||
let data = gen_random(this, len as usize)?;
|
||||
this.memory_mut().get_mut(ptr.alloc_id)?
|
||||
.write_bytes(tcx, ptr, &data)?;
|
||||
}
|
||||
|
||||
this.write_null(dest)?;
|
||||
}
|
||||
|
||||
// Windows API stubs.
|
||||
// HANDLE = isize
|
||||
|
@ -21,17 +21,13 @@ fn fixed_rng() {
|
||||
|
||||
#[test]
|
||||
fn entropy_rng() {
|
||||
#[cfg(not(target_os="macos"))] // FIXME entropy does not work on macOS
|
||||
// (Not disabling the entire test as that would change the output.)
|
||||
{
|
||||
// Use this opportunity to test querying the RNG (needs an external crate, hence tested here and not in the compiletest suite)
|
||||
let mut rng = SmallRng::from_entropy();
|
||||
let _val = rng.gen::<i32>();
|
||||
// Use this opportunity to test querying the RNG (needs an external crate, hence tested here and not in the compiletest suite)
|
||||
let mut rng = SmallRng::from_entropy();
|
||||
let _val = rng.gen::<i32>();
|
||||
|
||||
// Also try per-thread RNG.
|
||||
let mut rng = rand::thread_rng();
|
||||
let _val = rng.gen::<i32>();
|
||||
}
|
||||
// Also try per-thread RNG.
|
||||
let mut rng = rand::thread_rng();
|
||||
let _val = rng.gen::<i32>();
|
||||
}
|
||||
|
||||
// A test that won't work on miri
|
||||
|
Loading…
x
Reference in New Issue
Block a user